python - 合并文件擅长使用 Pandas 覆盖 Python 中的第一列

标签 python excel pandas

我有很多文件 excel,我想使用以下代码附加多个 excel 文件:

import pandas as pd
import glob
import os
import openpyxl

df = []
for f in glob.glob("*.xlsx"):

    data = pd.read_excel(f, 'Sheet1')
    data.index = [os.path.basename(f)] * len(data)
    df.append(data)

df = pd.concat(df)
writer = pd.ExcelWriter('output.xlsx')
df.to_excel(writer,'Sheet1')
writer.save()

Excel 文件具有以下结构:

enter image description here

输出如下:

enter image description here

为什么python在连接excel文件时会改变第一列?

最佳答案

我认为你需要:

df = []
for f in glob.glob("*.xlsx"):
    data = pd.read_excel(f, 'Sheet1')
    name = os.path.basename(f)
    #create Multiindex for not overwrite original index
    data.index = pd.MultiIndex.from_product([[name], data.index], names=('files','orig'))
    df.append(data)

#reset index for columns from MultiIndex 
df = pd.concat(df).reset_index()

另一种解决方案是使用参数keys concat :
files = glob.glob("*.xlsx")
names = [os.path.basename(f) for f in files]
dfs = [pd.read_excel(f, 'Sheet1') for f in files]

df = pd.concat(dfs, keys=names).rename_axis(('files','orig')).reset_index()

与以下内容相同:
df = []
names = []
for f in glob.glob(".xlsx"):
    df.append(pd.read_excel(f, 'Sheet1'))
    names.append(os.path.basename(f))

df = pd.concat(df, keys=names).rename_axis(('files','orig')).reset_index()

最后一次写入没有索引和列名的 excel:
writer = pd.ExcelWriter('output.xlsx')
df.to_excel(writer,'Sheet1', index=False, header=False)
writer.save()

关于python - 合并文件擅长使用 Pandas 覆盖 Python 中的第一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46468921/

相关文章:

python - 从 scapy 数据包中获取信息字符串

python - 将 BeautifulSoup 函数应用于 Pandas DataFrame

excel - 在 Windows Server 2012 R2 上从 VBA 调用批处理文件时出现奇怪的 FTP 行为

excel - Excel/SharedStrings 的排序算法

python - 如何在 Travis 上安装 PySide?

javascript - javascript 参数对象的 python 版本 - 它存在吗?

excel - 如何使用 Matlab 或 Excel 从两个表中获取行的交集?

python - 如何用该列的平均值填充数据框中的空白(Nan)?

python - Pandas 表子集给出无效类型比较错误

python - pandas.read_json 导致 0xC0000005 错误