在Pandas 0.16+中如何使用变量指定列名添加列?
解决Pandas批量添加动态命名列的问题
这个问题我之前也碰到过!核心原因是assign()方法里的参数是关键字参数,你直接写new_col_name = ...的时候,Python会把new_col_name当成字面量的列名,而不是你变量里存储的字符串值。下面给你两种可行的解决方案:
方案1:用字典解包修正循环逻辑
既然assign()支持接收**kwargs(关键字参数),我们可以把动态列名和对应的值打包成字典,再用**解包传入,这样就能让变量里的字符串成为真正的列名了:
for col in test.columns: new_col_name = col + "_nancount" # 用字典解包传递动态列名 test = test.assign(**{new_col_name: test[col].isna().sum()})
方案2:批量生成(更高效)
如果列的数量较多,循环会比较低效,推荐一次性生成所有需要的列,再合并到原DataFrame中:
方法A:利用字典推导式直接assign
# 一次性生成所有新列的键值对 nancount_dict = {f"{col}_nancount": test[col].isna().sum() for col in test.columns} # 批量添加到DataFrame test = test.assign(**nancount_dict)
方法B:用concat合并统计结果
先计算所有列的缺失值数量,转成单行DataFrame后添加后缀,再和原表合并:
import pandas as pd # 计算每列缺失值数量并转成单行DataFrame nancount_df = test.isna().sum().to_frame().T.add_suffix("_nancount") # 按列合并原表和统计结果 test = pd.concat([test, nancount_df], axis=1)
这样当原列是["A","B","C"]时,就会自动生成["A_nancount","B_nancount","C_nancount"]这三列啦!
内容的提问来源于stack exchange,提问作者Federico Dorato
相关产品推荐
相关产品推荐

