使用Pandas合并两个CSV文件结果异常,出现大量NaN值求助
问题原因
你用pd.concat()做的是纵向行堆叠,它会把两个表格的行上下拼接。因为两个CSV的列大部分不重合,对应不上的列就会自动填充NaN,所以第一个CSV的行里第二个CSV的列全是NaN,第二个CSV的行里第一个CSV的列也会是NaN,最终数据分成上下两段。
正确合并方法
两个CSV是通过ID关联的(第一个的ProductID对应第二个的ID),应该用pd.merge()做关联合并,代码如下:
import pandas as pd # 分别读取两个CSV df1 = pd.read_csv('data1.csv') df2 = pd.read_csv('data2.csv') # 按对应ID字段合并,这里用inner模式只保留两边都有的ID数据 merged_df = pd.merge(df1, df2, left_on='ProductID', right_on='ID', how='inner') # 查看合并结果 print(merged_df)
关键参数说明
left_on='ProductID':指定第一个表的关联列right_on='ID':指定第二个表的关联列how参数可选:inner:只保留两边能匹配到ID的行left:保留第一个表的所有行,匹配不到的列用NaN填充right:保留第二个表的所有行,匹配不到的列用NaN填充outer:保留所有行,匹配不到的列用NaN填充
补充说明
你当前的concat代码输出里,前两行是data1的数据,后面还会跟着data2的数据,只是data2的行里ProductID、ProductName、ProductBrand这些列都会是NaN,这是纵向拼接的正常结果,但不是你想要的关联合并效果。
内容的提问来源于stack exchange,提问作者PARINEETI GUPTA
相关产品推荐
相关产品推荐

