如何在循环中为Pandas DataFrame追加生成的列?
循环生成序列并添加为新DataFrame列的问题解决
问题描述
遍历原DataFrame的每一列,通过函数生成与原列长度相同的序列,将这些序列依次作为列添加到新初始化的空DataFrame中,但使用df.assign()时无法正常运行。
错误分析
你的代码存在几个关键问题:
- 空DataFrame初始化拼写错误:
pd.Dataframe()应为pd.DataFrame()(注意大写F) assign()用法错误:该方法需要指定列名和对应数据,且会返回新的DataFrame,不会直接修改原对象- 操作对象错误:代码中调用
df.assign()而非目标新DataFramedf_new,且未接收返回结果
正确解决方案
方法一:修正循环中的assign()用法
import pandas as pd # 模拟你的列处理函数,替换为实际业务逻辑 def process_column(col_data): return col_data * 0.5 # 示例:生成原列的半值序列 def main(): # 模拟原DataFrame(替换为你的实际数据) df_full = pd.DataFrame({ 'Col1': [48, 118, 87.4, 19.6], 'Col2': [42, 100, 8, 10], 'Col3': [40, 122.2, 96, 20], 'Col4': [49.6, 120.6, 98, 30] }) df_new = pd.DataFrame() # 正确初始化空DataFrame for col in df_full.columns: col_data = df_full[col] value_generated = process_column(col_data) # 动态指定列名,接收assign返回的新DataFrame df_new = df_new.assign(**{col: value_generated}) print(df_new)
方法二:先收集所有列数据,一次性构建(更高效)
循环中频繁修改DataFrame会产生性能开销,推荐先收集所有生成的列数据,再一次性构建新DataFrame:
import pandas as pd def process_column(col_data): return col_data * 0.5 def main(): df_full = pd.DataFrame({ 'Col1': [48, 118, 87.4, 19.6], 'Col2': [42, 100, 8, 10], 'Col3': [40, 122.2, 96, 20], 'Col4': [49.6, 120.6, 98, 30] }) # 用字典存储所有生成的列(键为列名,值为序列) new_columns = {} for col in df_full.columns: new_columns[col] = process_column(df_full[col]) # 一次性构建新DataFrame df_new = pd.DataFrame(new_columns) print(df_new)
关键注意点
pd.DataFrame()初始化时首字母F需大写,拼写错误会直接导致报错assign()是不可变操作,必须接收其返回的新DataFrame才能保留修改- 用
**{col: value_generated}可以实现动态列名赋值,适配循环中的不同列 - 当处理大数据集时,方法二的性能远优于方法一,避免了循环中多次DataFrame拷贝
内容的提问来源于stack exchange,提问作者A Newbie
相关产品推荐
相关产品推荐

