猿问

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

我有多个数据框,我想过滤每个数据框,以便每个 df 只保留由单词“总体”组成的列。我有以下 for 循环,但它没有与手动执行相同的效果 [又名 y15 = y15.filter(like='Overall')]。


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            |

+--------------+

我知道这是一个简单的例子,但在过去的一个小时里我一直在浏览 Stack,但找不到类似的例子。我缺少什么?谢谢!


精慕HU
浏览 158回答 2
2回答

紫衣仙女

循环中的变量不是指针,因此您不会更改实际的数据帧。你可以这样做(我没有测试过):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')
随时随地看视频慕课网APP

相关分类

Python
我要回答