根据数据框的名称过滤数据框中的列

时间:2020-08-12 15:17:15

标签: python pandas dataframe

我有一堆数据框,所有数据框都包含一列,该列是数据框的名称,下划线用空格替换,并且最后3个字符不存在。 ['Player_Bio_df','Team_df','Rate_df'] 例如

Player_Bio_df= pd.DataFrame({'field':['name','address','address2','city','state','zip','home','cell'],'Player Bio':[1,1,2,1,3,1,2,1]})

Team_df = pd.DataFrame({'field':['name','address','address2','city','state','zip','home','cell'],'Team':[1,1,2,1,2,1,2,2]})

Rate_df= pd.DataFrame({'field':['name','address','address2','city','state','zip','home','cell'],'Rate':[1,1,1,1,3,1,2,1]})

我还有所有数据框名称(下面的SelFieldsDfs)的列表(字符串)。

 SelFieldsDfs  = ['Player_Bio_df', 'Team_df', 'Rate_df']

我想过滤所有数据帧,以使Team_df仅在“字段”中具有具有address2和home的记录(因为在那些相同的记录中Player Bio = 2)。由于Rate = 2个int软管记录,因此rate_df仅具有地址2,状态,家庭和单元格记录

所以我要在该特定字段上为值2过滤此数据帧列表

 for dfs in SelFieldsDfs:
     colname = str(dfs).replace('_', ' ')[:-3]
     vars()[str(dfs)] = str(dfs)[str(dfs).colname == 2]

错误显示'AttributeError:'str'对象没有属性'colname'

1 个答案:

答案 0 :(得分:1)

错误是因为您试图在此行中使用字符串(select o.id, sum(a.hours) as "hours", sum(di.amount) as "amount" from organizations o inner join activities a on a.organization_id = o.id inner join donations d on d.organization_id = o.id inner join donation_items di on di.donation_id = d.id group by o.id ; )作为数据框:

dfs

但是,您需要获取并更改数据框名称的值,因此将该行更改为此:

vars()[str(dfs)] = str(dfs)[str(dfs).colname == 2]
相关问题