无法将 .xlsx 文件与 pandas 合并
Trouble merging .xlsx files with pandas
我正在使用 python 2.7,我编写了一个脚本,该脚本应采用两个 .xlsx 文件的名称,使用 pandas 将它们转换为两个数据帧,然后将它们连接起来。
所考虑的两个文件具有相同的行和不同的列。
基本上,我有这两个 Excel 个文件:
我想保留相同的行并合并列。
代码如下:
import pandas as pd
file1 = 'file1.xlsx'
file2 = 'file2.xlsx'
sheet10 = pd.read_excel(file1, sheet_name = 0)
sheet20 = pd.read_excel(file2, sheet_name = 0)
conc1 = pd.concat([sheet10, sheet20], sort = False)
output = pd.ExcelWriter('output.xlsx')
conc1.to_excel(output, 'Sheet 1')
output.save()
输出没有像我预期的那样(根据我在网上阅读的示例),而是如下所示:
有谁知道我可以改进我的脚本吗?
非常感谢。
要使用 pd.concat
获得预期的输出,两个数据框中的列名应该相同。方法如下,
# Create a 1:1 mapping of sheet10 and sheet20 columns
cols_mapping = dict(zip(sheet20.columns, sheet10.columns))
# Rename the columns in sheet20 to match with that of sheet10
sheet20_renamed = sheet20.rename(cols_mapping, axis=1)
concatenated = pd.concat([sheet10, sheet20_renamed])
此处的最佳答案实际上取决于数据的确切形状。根据您提供的示例,您希望保留的具有不同列 headers 的两个数据帧之间的数据索引似乎相同。如果是这种情况,这将是最好的解决方案:
import pandas as pd
file1 = 'file1.xlsx'
file2 = 'file2.xlsx'
sheet10 = pd.read_excel(file1, sheet_name = 0)
sheet20 = pd.read_excel(file2, sheet_name = 0)
conc1 = sheet10.merge(sheet20, how="left", left_index=True, right_index=True)
output = pd.ExcelWriter('output.xlsx')
conc1.to_excel(output, sheet_name='Sheet 1', ignore_index=True)
output.save()
由于两个初始数据帧中的行数直接匹配,因此使用左、右、外或内连接并不重要。在此示例中,我使用了左连接。
如果两个数据框中的行没有完全对齐,选择的连接方法会对您的输出产生巨大影响。我建议您在继续之前先查看 pandas 关于 merge/join/concatenate 的文档。
我正在使用 python 2.7,我编写了一个脚本,该脚本应采用两个 .xlsx 文件的名称,使用 pandas 将它们转换为两个数据帧,然后将它们连接起来。 所考虑的两个文件具有相同的行和不同的列。 基本上,我有这两个 Excel 个文件:
我想保留相同的行并合并列。 代码如下:
import pandas as pd
file1 = 'file1.xlsx'
file2 = 'file2.xlsx'
sheet10 = pd.read_excel(file1, sheet_name = 0)
sheet20 = pd.read_excel(file2, sheet_name = 0)
conc1 = pd.concat([sheet10, sheet20], sort = False)
output = pd.ExcelWriter('output.xlsx')
conc1.to_excel(output, 'Sheet 1')
output.save()
输出没有像我预期的那样(根据我在网上阅读的示例),而是如下所示:
有谁知道我可以改进我的脚本吗? 非常感谢。
要使用 pd.concat
获得预期的输出,两个数据框中的列名应该相同。方法如下,
# Create a 1:1 mapping of sheet10 and sheet20 columns
cols_mapping = dict(zip(sheet20.columns, sheet10.columns))
# Rename the columns in sheet20 to match with that of sheet10
sheet20_renamed = sheet20.rename(cols_mapping, axis=1)
concatenated = pd.concat([sheet10, sheet20_renamed])
此处的最佳答案实际上取决于数据的确切形状。根据您提供的示例,您希望保留的具有不同列 headers 的两个数据帧之间的数据索引似乎相同。如果是这种情况,这将是最好的解决方案:
import pandas as pd
file1 = 'file1.xlsx'
file2 = 'file2.xlsx'
sheet10 = pd.read_excel(file1, sheet_name = 0)
sheet20 = pd.read_excel(file2, sheet_name = 0)
conc1 = sheet10.merge(sheet20, how="left", left_index=True, right_index=True)
output = pd.ExcelWriter('output.xlsx')
conc1.to_excel(output, sheet_name='Sheet 1', ignore_index=True)
output.save()
由于两个初始数据帧中的行数直接匹配,因此使用左、右、外或内连接并不重要。在此示例中,我使用了左连接。
如果两个数据框中的行没有完全对齐,选择的连接方法会对您的输出产生巨大影响。我建议您在继续之前先查看 pandas 关于 merge/join/concatenate 的文档。