如何用Python将两个CSV文件并排合并?代码报错求解
问题:如何并排合并两个CSV文件?
我查过合并CSV的相关方案,但都不符合我的需求——我需要把两个CSV文件横向并排合并(原文件是两个独立的表格,合并后将它们的列拼接在一起,形成一个宽表格)。
我的代码如下:
# 找到第一个学校CSV文件 file1 = file1_path_in_folder df1 = pd.read_csv(file1) df1.head() # 找到第二个学校CSV文件 file2 = file2_path_in_folder df2 = pd.read_csv(file2) df2.head() merged = df1.merge(df2, on=' ') # 引号里的空格是因为第一个单元格(A1)是空的 merged.to_csv("output.csv", index=False)
运行后出现错误:
Traceback (most recent call last): File "c:\Users\anyuy\Documents\College_search\program\compare_read_csv.py", line 25, in <module> merged = df1.merge(df2, on=' ') File "C:\Users\anyuy\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\pandas\core\frame.py", line 9345, in merge return merge( File "C:\Users\anyuy\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\pandas\core\reshape\merge.py", line 107, in merge op = _MergeOperation( File "C:\Users\anyuy\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\pandas\core\reshape\merge.py", line 700, in __init__ ) = self._get_merge_keys() File "C:\Users\anyuy\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\pandas\core\reshape\merge.py", line 1097, in _get_merge_keys right_keys.append(right._get_label_or_level_values(rk)) File "C:\Users\anyuy\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\pandas\core\generic.py", line 1840, in _get_label_or_level_values raise KeyError(key) KeyError: ' '
我试过去掉引号里的空格,还是报同样的错。请问问题出在哪?怎么解决?
解决方法
错误原因
你用错了合并方法:merge()是用来按指定列做关联合并(类似数据库的JOIN操作,需要两个表有共同的关联列),但你要的是横向拼接列,完全不是一个场景。另外,你指定的on=' '根本不是DataFrame里存在的列名,所以触发了KeyError。
正确实现
直接用pd.concat()方法,指定axis=1即可实现横向列拼接:
修改后的完整代码
import pandas as pd # 读取CSV时,如果原文件没有列名(A1空白),设置header=None避免列名混乱 df1 = pd.read_csv(file1_path_in_folder, header=None) df2 = pd.read_csv(file2_path_in_folder, header=None) # axis=1表示按列拼接,把两个表的列并排放在一起 merged = pd.concat([df1, df2], axis=1) # 保存结果,header=False避免自动添加列名 merged.to_csv("output.csv", index=False, header=False)
注意事项
- 如果两个CSV的行数不一致,拼接后行数少的那个表的空缺行会自动用
NaN填充,这是正常现象。 - 如果原文件有自己的列名,去掉
header=None和to_csv里的header=False即可。
内容的提问来源于stack exchange,提问作者Lil_coder
相关产品推荐
相关产品推荐

