首页 > 解决方案 > 是否可以使用 **kwargs 中的关键字名称来过滤我的数据框?

问题描述

抱歉,如果标题有点晦涩,我很乐意更改它..

问题:我正在尝试在以下代码中使用关键字名称来使用 pandas 在数据框中按列名称进行过滤。

@staticmethod
def filter_json(json, col_filter, **kwargs):
    '''
        Convert and filter a JSON object into a dataframe
    '''
    df = pd.read_json(json).drop(col_filter, axis=1)
    for arg in kwargs:
        df = df[(df.arg.isin(kwargs[arg]))]
    return df

但是我收到错误AttributeError: 'DataFrame' object has no attribute 'arg',因为arg不是有效的列名(有意义)在行df.arg.isin(kwargs[arg]))]

我正在使用以下方法调用该方法...

filter_json(json_obj, MY_COL_FILTERS, IsOpen=['false', 0])

意义df.arg本质上应该是df.IsOpen

问题:有没有办法在arg用作我的列名(IsOpen)?而不是我必须手动输入它df.IsOpen

标签: pythondataframekeyword-argument

解决方案


dataframe[columnname]您也可以使用符号访问列: https ://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html

尝试:

for arg in kwargs:  # arg is 'IsOpen'
        df = df[(df[arg].isin(kwargs[arg]))]  # df['IsOpen'] is same as df.IsOpen

推荐阅读