使用filter函数和for循环过滤多个数据帧

2024-07-06 23:33:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有多个数据帧,我想对每个数据帧进行过滤,以便每个df只保留由单词“total”组成的列。我有以下for循环,但其效果与我手动执行时不同[aka y15=y15.filter(like='totall')]

pit_dfs = [y15,y16,y17]

for i in pit_dfs:
    i = i.filter(like='Overall')

可复制示例:

y15 = pd.DataFrame({'Col1-Overall': ['a','b','c','d'],
              'Col2': ['a','b','c','d'],
              'Col3': ['a','b','c','d'],
              'Col4': ['a','b','c','d']})

y16 = pd.DataFrame({'Col1-Overall': ['a','b','c','d'],
              'Col2': ['a','b','c','d'],
              'Col3': ['a','b','c','d'],
              'Col4': ['a','b','c','d']})

y17 = pd.DataFrame({'Col1-Overall': ['a','b','c','d'],
              'Col2': ['a','b','c','d'],
              'Col3': ['a','b','c','d'],
              'Col4': ['a','b','c','d']})

预期产出:

y15
+--------------+
| Col1-Overall |
+--------------+
| a            |
+--------------+
| b            |
+--------------+
| c            |
+--------------+
| d            |
+--------------+

y16
+--------------+
| Col1-Overall |
+--------------+
| a            |
+--------------+
| b            |
+--------------+
| c            |
+--------------+
| d            |
+--------------+

y17
+--------------+
| Col1-Overall |
+--------------+
| a            |
+--------------+
| b            |
+--------------+
| c            |
+--------------+
| d            |
+--------------+

我知道这是一个简单的例子,但在过去的一个小时里,我一直在查看堆栈,没有找到类似的例子。我错过了什么?谢谢


Tags: 数据dataframeforfilterlikecol2col3col1
2条回答

请参见this answerthis example关于Python for循环。循环中的变量是而不是指针,因此您不会更改实际的数据帧

您可以这样做(我还没有测试):

pit_dfs = [y15,y16,y17,y18,y19]

for idx in range(len(pit_dfs)):
    pit_dfs[idx] = pit_dfs[idx].filter(like='Overall')

这里有一个替代方案:

pit_dfs = [y15,y16,y17,y18,y19]

def filter_cols_like(df, like):
    cols_not_like = [col for col in df.columns if like not in col]
    df.drop(columns=cols_not_like,inplace=True)

for i in pit_dfs:
    filter_cols_like(i,like='Overall')

相关问题 更多 >