是否可以使用 **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

解决方法

您也可以使用 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