【问题标题】:pandas dataframe multiline query熊猫数据框多行查询
【发布时间】:2020-08-26 12:16:25
【问题描述】:

假设我有一个数据框

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.randint(10, size=(10,3)), columns=['a', 'b', 'c'])

如果我现在尝试使用query 方法查询它:

这行得通:

df.query('''a > 3 and b < 9''')

这会引发错误:

df.query(
    '''
        a > 3 and
        b < 9
    '''
)

我尝试了多行字符串的多种变体,但结果总是以下错误:

~/ven/lib/python3.6/site-packages/pandas/core/computation/eval.py in eval(expr, parser, engine, truediv, local_dict, global_dict, resolvers, level, target, inplace)
    306     if multi_line and target is None:
    307         raise ValueError(
--> 308             "multi-line expressions are only valid in the "
    309             "context of data, use DataFrame.eval"
    310         )

ValueError: multi-line expressions are only valid in the context of data, use DataFrame.eval

有人知道如何让它工作吗? 问题是,实际上我有一个很长的查询要做,而且必须在一行中写下所有内容会非常不方便。 我知道我可以改用布尔索引,但我的问题只是关于如何通过 query 方法使用多行。

谢谢

【问题讨论】:

    标签: python python-3.x pandas python-3.6 multiline


    【解决方案1】:

    使用多行字符反斜杠 (\)

    例如:

    df = pd.DataFrame(np.random.randint(10, size=(10,3)), columns=['a', 'b', 'c'])
    print(df.query(
        '''
            a > 3 and \
            b < 9
        '''
    ))
    

    【讨论】:

      【解决方案2】:

      您可以删除换行符\n 以允许多行查询

      query_multiline = '''
        a > 3 and
        b < 9
      '''
      
      query_multiline = query_multiline.replace('\n', '')
      
      df.query(query_multiline)    
      

      【讨论】:

        猜你喜欢
        • 2020-02-25
        • 1970-01-01
        • 2021-08-07
        • 2021-10-25
        • 2020-11-10
        • 2021-10-05
        • 2017-03-10
        • 1970-01-01
        • 2014-10-03
        相关资源
        最近更新 更多