向空Pandas DataFrame追加数据时列不匹配问题咨询
Pandas追加数据列错位问题的原因与解决办法
问题原因
你执行dftest.append([testdata])时,[testdata]是嵌套列表结构,Pandas会将其视为一行数据,但因为你的testdata是普通列表,没有和原DataFrame的A-G列名绑定,Pandas会默认用0-6作为这行数据的列名,导致原列匹配不到值显示NaN,同时新增0-6列填充数据。
解决方法
方法1:用字典映射列名
把testdata改成字典,键对应原DataFrame的列名,让Pandas精准匹配列:
import pandas as pd dftest = pd.DataFrame(columns=["A","B","C","D","E","F","G"]) testdata = {"A":1, "B":2, "C":3, "D":4, "E":5, "F":6, "G":7} dftest = dftest.append(testdata, ignore_index=True)
ignore_index=True是为了重置索引,避免出现重复索引问题。
方法2:将列表转为同列名的DataFrame
把testdata包装成DataFrame,指定和原表一致的列名再追加:
import pandas as pd dftest = pd.DataFrame(columns=["A","B","C","D","E","F","G"]) testdata = [1,2,3,4,5,6,7] dftest = dftest.append(pd.DataFrame([testdata], columns=dftest.columns), ignore_index=True)
推荐方式(Pandas 2.0+)
由于append方法在Pandas 2.0及以上版本已被弃用,更推荐使用pd.concat:
import pandas as pd dftest = pd.DataFrame(columns=["A","B","C","D","E","F","G"]) testdata = [1,2,3,4,5,6,7] testdata_df = pd.DataFrame([testdata], columns=dftest.columns) dftest = pd.concat([dftest, testdata_df], ignore_index=True)
内容的提问来源于stack exchange,提问作者Lamm
相关产品推荐
相关产品推荐

