如何用循环将pandas生成的哑变量合并至原DataFrame?
问题解决方法
你的循环代码出错的核心原因是:把变量名的字符串(比如'var1')当成了变量本身来操作,Python无法识别字符串对应的实际对象。下面是几种可行的修正方案:
方案1:直接存储哑变量对象(推荐)
不要存变量名字符串,直接把生成的哑变量DataFrame放进列表,循环时直接操作对象:
# 直接将哑变量对象存入列表,而非字符串 dummies = [var1, var2, var3] for dummy_df in dummies: df.index = dummy_df.index df = df.join(dummy_df)
方案2:通过变量名字符串获取全局变量
如果必须用字符串列表(比如变量名是动态生成的),可以用globals()获取全局作用域中的变量:
dummies = ['var1', 'var2', 'var3'] for item_name in dummies: # 根据字符串获取对应的哑变量对象 dummy_df = globals()[item_name] df.index = dummy_df.index df = df.join(dummy_df)
方案3:用concat一步合并(更高效)
如果所有哑变量和原DataFrame的索引逻辑一致,完全可以跳过循环,用pd.concat一次性合并,代码更简洁:
import pandas as pd dummies = [var1, var2, var3] # axis=1表示按列合并,自动对齐索引 df = pd.concat([df] + dummies, axis=1)
错误原因说明
item + '.index'生成的是字符串(比如'var1.index'),不是var1这个DataFrame的index属性,无法作为索引赋值给df.index。df.join(item)中传入的是字符串,而join方法需要接收的是DataFrame/Series对象,而非变量名字符串。
内容的提问来源于stack exchange,提问作者Serena
相关产品推荐
相关产品推荐

