使用append方法创建DataFrame时遇数据类型不匹配错误求助
解决DataFrame append时的Buffer dtype mismatch错误
嘿,这个报错的根源其实出在你初始化DataFrame列的方式上,咱们一步步拆解:
错误原因分析
你写了stats = pd.DataFrame(columns=[col_stats]),这里的[col_stats]是把整个col_stats列表当成了单个列名,导致你的DataFrame其实只有一列,列名是['Attribute', 'Mean', 'Var', 'Std'](一个列表对象)。而你后续append的new_row是长度为4的Series,两者的列数完全不匹配,进而触发了 dtype 不兼容的错误(原DataFrame列是object类型,而你要添加的是多个数值/字符串类型)。
修正方案1:修复列初始化+正确使用append
先把列的初始化改对,同时给Series指定索引避免顺序问题:
import pandas as pd import numpy as np col_stats = ['Attribute', 'Mean', 'Var', 'Std'] # 这里直接用col_stats作为columns参数,不要加外层括号 stats = pd.DataFrame(columns=col_stats) for i in train: new_row = [i, train[i].mean(), np.var(train[i]), np.nanstd(train[i])] # 给Series指定和DataFrame一致的索引,确保列对应正确 new_row_series = pd.Series(new_row, index=col_stats) stats = stats.append(new_row_series, ignore_index=True) print(stats)
更推荐的方案2:避免循环append(效率更高)
因为append方法已经被pandas弃用了,而且循环里append的效率很低,更推荐先把所有行数据收集到列表里,最后一次性创建DataFrame:
import pandas as pd import numpy as np col_stats = ['Attribute', 'Mean', 'Var', 'Std'] rows_list = [] for i in train: row_data = { 'Attribute': i, 'Mean': train[i].mean(), 'Var': np.var(train[i]), 'Std': np.nanstd(train[i]) } rows_list.append(row_data) # 一次性生成DataFrame,效率远高于循环append stats = pd.DataFrame(rows_list, columns=col_stats) print(stats)
这样两种方式都能解决你遇到的 dtype 错误,而且第二种方案在数据量大的时候优势更明显~
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

