【发布时间】:2019-10-27 16:58:10
【问题描述】:
我有一些不同列的excel表如下:
表 A:Col1 Col2 Col3
表 B:Col2 Col4 Col5
表 C:Col1 Col6 Col7
我的决赛桌应该是这样的:
表格决赛:Col1 Col2 Col3 Col4 Col5 Col6 Col7
如果没有特定列的详细信息,则应保持空白。我一次只成功合并了两个表,但我想将所有表合并在一起。
这是合并两张表的代码:
import pandas as pd
import numpy as np
import glob
df = pd.read_excel('C:/Users/Am/Downloads/sales-mar-2014.xlsx')
status = pd.read_excel('C:/Users/Am/Downloads/customer-status.xlsx')
all_data_st = pd.merge(df, status, how='outer')
all_data_st.to_excel('C:/Users/Am/Downloads/a1.xlsx',header=True)
这是我为合并两个以上工作表而编写的代码:
import pandas as pd
import numpy as np
import glob
all_data = pd.DataFrame()
for f in glob.glob(‘C:/Users/Am/Downloads/*.xlsx’):
all_data = all_data.merge(pd.read_excel(f), how='outer')
writer = pd.ExcelWriter('merged.xlsx', engine='xlsxwriter')
all_data.to_excel(writer,sheet_name='Sheet1')
writer.save()
这是我得到的错误:
Traceback (most recent call last):
File "E:/allfile.py", line 7, in <module>
all_data = all_data.merge(pd.read_excel(f), how='outer')
File "C:\Users\Am\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pandas\core\frame.py", line 6868, in merge
copy=copy, indicator=indicator, validate=validate)
File "C:\Users\Am\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pandas\core\reshape\merge.py", line 47, in merge
validate=validate)
File "C:\Users\Am\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pandas\core\reshape\merge.py", line 524, in __init__
self._validate_specification()
File "C:\Users\Am\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pandas\core\reshape\merge.py", line 1033, in _validate_specification
lidx=self.left_index, ridx=self.right_index))
pandas.errors.MergeError: No common columns to perform merge on. Merge options: left_on=None, right_on=None, left_index=False, right_index=False
【问题讨论】:
-
嗨,Amreeta,您能否进一步扩展您的问题,包括您现在获得的以及您期望拥有的?
-
你应该使用
concat() -
嗨@BorjaTur,我想要的是要合并的两个文件,第一个代码只对两个文件执行,我编写的第二个文件预计会合并两个以上的文件,但我想我哪里出错了……
-
@anky_91 我曾尝试使用 concat() 但表示所有文件的列名应该相同。如果您知道如何解决它,请您发布它的语法吗?
标签: python excel pandas merge glob