使用Pandas合并CSV文件:01-09前缀行未合并的原因及解决
问题原因
- 核心问题出在CSV读取阶段:Pandas默认会把纯数字列识别成整数,像
01、02这种带前导零的数值会被自动转成1、2。 - 后续转字符串时,一个文件里的列值是
"1",另一个文件如果保留了原始的"01"字符串,两者没法匹配,导致01-09的行合并不了。
解决方法
方法1:读取时直接指定列类型为字符串
在读取CSV的时候就告诉Pandas目标列是字符串,避免自动转换前导零:
import pandas as pd # 读取时指定1stcolumn为字符串类型,保留原始前导零 data1 = pd.read_csv('1stfile.csv', dtype={'1stcolumn': str}) data2 = pd.read_csv('2ndfile.csv', dtype={'1stcolumn': str}) # 直接执行内合并 output1 = pd.merge(data1, data2, on='1stcolumn', how='inner') print(output1) output1.to_csv('finalfile.csv', index=False, header=False)
方法2:统一补前导零格式
如果已经把列读成了整数,可以通过补零把所有字符串统一成两位格式:
import pandas as pd data1 = pd.read_csv('1stfile.csv') data2 = pd.read_csv('2ndfile.csv') # 转字符串后补前导零到两位(如果是三位数就改成zfill(3)) data1['1stcolumn'] = data1['1stcolumn'].astype(str).str.zfill(2) data2['1stcolumn'] = data2['1stcolumn'].astype(str).str.zfill(2) output1 = pd.merge(data1, data2, on='1stcolumn', how='inner') print(output1) output1.to_csv('finalfile.csv', index=False, header=False)
内容的提问来源于stack exchange,提问作者Chetan
相关产品推荐
相关产品推荐

