python - 如何迭代熊猫中的数据框列表?
问题描述
我有多个数据框,我想在其上运行此函数,该函数主要从数据框中删除不必要的列并返回一个数据框:
def dropunnamednancols(df):
"""
Drop any columns staring with unnamed and NaN
Args:
df ([dataframe]): dataframe of which columns to be dropped
"""
#first drop nan columns
df = df.loc[:, df.columns.notnull()]
#then search for columns with unnamed
df = df.loc[:, ~df.columns.str.contains('^Unnamed')]
return df
现在我遍历数据框列表: [df1, df2, df3]
dfsublist = [df1, df2, df3]
for index in enumerate(dfsublist):
dfsublist[index] = dropunnamednancols(dfsublist[index])
尽管dfsublist的项目已更改,但原始数据框df1、df2、df3仍保留不必要的列。我怎么能做到这一点?
解决方案
如果我理解正确,您想将一个函数分别应用于多个数据帧。
潜在的问题是,在您的函数中,您返回一个新的数据框,并用新的自己的而不是修改旧的原始数据框替换列表中存储的数据框。
如果你想修改原来的,你必须使用inplace=True
pandas 函数的参数。这是可能的,但不推荐,如此处所示。
因此,您的代码可能如下所示:
def dropunnamednancols(df):
"""
Drop any columns staring with unnamed and NaN
Args:
df ([dataframe]): dataframe of which columns to be dropped
"""
cols = [col for col in df.columns if (col is None) | (col.startswith('Unnamed'))]
df.drop(cols, axis=1, inplace=True)
作为示例数据的示例:
import pandas as pd
df_1 = pd.DataFrame({'a':[0,1,2,3], 'Unnamed':[9,8,7,6]})
df_2 = pd.DataFrame({'Unnamed':[9,8,7,6], 'b':[0,1,2,3]})
lst_dfs = [df_1, df_2]
[dropunnamednancols(df) for df in lst_dfs]
# df_1
# Out[55]:
# a
# 0 0
# 1 1
# 2 2
# 3 3
# df_2
# Out[56]:
# b
# 0 0
# 1 1
# 2 2
# 3 3
推荐阅读
- mysql - 根据用户电子邮件选择订阅
- ios - 作为完成处理程序返回响应
- javascript - 将角色保存到 JSON 文件
- python - RuntimeError:无法在需要 grad 的张量上调用 numpy()。改用 tensor.detach().numpy()
- flutter - Back4app parse_server_sdk_flutter 获取注册用户的邮箱
- python - 当列值包含给定列表中的至少一个元素时,使用映射获取新数据框的列表理解
- c - 我正在尝试用 C 编写一个排序函数,但我在声明函数方面还很陌生,无法让它工作
- c# - 如何使用 Image.FromFile 在 Visual Studio C# Windows 窗体中设置图像
- react-native - undefined 不是对象(评估 '_this.props.utils.initialmoment')
- android-studio - Android Studio 无法将大量可绘制图像复制到另一个 kotlin 项目