Pandas DataFrame指定列追加数据报错TypeError的解决方案咨询
解决Pandas DataFrame追加数据到指定列的问题
嘿,我来帮你搞定这个问题!你遇到的TypeError是因为**df.append()方法根本没有column这个参数**,而且从Pandas 2.0版本开始,这个方法已经被正式弃用了,官方更推荐用pd.concat()或者先收集数据再一次性构建DataFrame的方式,不仅规范,效率也更高。
另外还要提个小细节:你写了两个分开的for循环,第一个循环会生成9个i值(计算后是4到12),第二个循环生成7个j值(计算后是10到16),直接追加的话会导致两列长度不一致,Pandas会自动给短的列补NaN。如果你是想让i和j一一对应,最好把两个计算放在同一个循环里哦。
接下来给你几种正确的实现方式:
方式一:先收集数据到列表,一次性构建DataFrame(首推!)
这种方式比逐行追加效率高太多,尤其是数据量大的时候,避免了频繁修改DataFrame的开销:
import pandas as pd # 先初始化空列表来收集数据 i_list = [] j_list = [] # 调整循环范围让i和j的数量一致(比如都生成9个值) for idx in range(9): i = 3 + (idx + 1) # 对应你原来的i=3+i(原i从1到9) j = (idx + 5) + 5 # 原j从5到13,这样也生成9个值,和i一一对应 i_list.append(i) j_list.append(j) # 一次性构建DataFrame,其他列可以根据需求填充默认值 df = pd.DataFrame({ 'i_column': i_list, 'j_column': j_list, 'type': [None]*len(i_list), 'Location': [None]*len(i_list) }) print(df)
方式二:逐行追加(用pd.concat替代弃用的append)
如果你确实需要逐行处理数据(比如每一步都要做额外逻辑),可以用pd.concat()来替代已经弃用的append:
import pandas as pd # 初始化空DataFrame df = pd.DataFrame(columns=['i_column','j_column','type','Location']) # 同一个循环里处理i和j,保证数量一致 for idx in range(9): i = 3 + (idx + 1) j = (idx + 5) + 5 # 构造单行数据的字典 new_row = { 'i_column': i, 'j_column': j, 'type': None, 'Location': None } # 把单行数据转成DataFrame,再合并到原df里 df = pd.concat([df, pd.DataFrame([new_row])], ignore_index=True) print(df)
针对你原来的两个分开循环的情况(允许列长度不一致)
如果你就是要保持两个分开的循环,不在意列长度差异,那可以直接给列赋值:
import pandas as pd df = pd.DataFrame(columns=['i_column','j_column','type','Location']) # 收集所有i值,直接赋值给i_column i_list = [] for i in range(1,10): i_val = 3 + i i_list.append(i_val) df['i_column'] = i_list # 收集所有j值,直接赋值给j_column j_list = [] for j in range(5,12): j_val = j +5 j_list.append(j_val) df['j_column'] = j_list # 给其他列填充默认值(比如None) df[['type', 'Location']] = None print(df)
运行后j_column的最后两行会显示NaN,因为i有9个值,j只有7个,Pandas会自动补全缺失值。
内容的提问来源于stack exchange,提问作者The Oracle
相关产品推荐
相关产品推荐

