首页 > 解决方案 > 在 Python 中加入文件时如何删除标题名称?

问题描述

正如这篇文章所建议的那样,我尝试过使用 numpy.concatonate

我正在处理的文件最初看起来像这样。

>>> df = pd.read_html(file)
>>> df.head()
            0            1                        2
0          Id         Date                   Reason
1         161  04-Mar-2019                Cancelled
2         843  04-Mar-2019                Cancelled
3         042  04-Mar-2019                Cancelled
4         247  04-Mar-2019                Cancelled 

这是我的代码,它吐出的 csv 文件仍然具有已加入文件的列名。

files = sorted(glob.glob(path + "Export*"+ extension))
all_data = []
if len(files) == 1: # check if there's only 1 file
    df = pd.read_html(files[0])[0]
    df.to_csv(path + filename + ".csv", index=False, header=False)

first = files.pop(-1) # order the files
files.insert(0, first)
for file in files:
    df = pd.read_html(file)[0]
    all_data.append(df.values)       


df = pd.DataFrame(np.concatenate(all_data), columns=pd.read_html(first)[0].columns)
df.to_csv(path + filename + ".csv", index=False, header=False)

标签: pythonpandas

解决方案


这里的问题是您没有像您想象的那样读取文件;first[0].columns实际上['0', '1', '2']不是['Id', 'Date', 'Reason'](如您所愿)。

如果没有正确识别列,您调用

pd.DataFrame(np.concatenate(all_data), columns=pd.read_html(first[0].columns))

不会按照你的意愿行事。

当您读取数据时,read_html您需要确保指定列名在文件中的位置。你可以用header参数做到这一点。

因此,您可能希望将数据读取为df = pd.read_html(file, header=1).

读入你的数据后应该是这样的。

df.head()
    Id         Date     Reason
1  161  04-Mar-2019  Cancelled
2  843  04-Mar-2019  Cancelled
3   42  04-Mar-2019  Cancelled
4  247  04-Mar-2019  Cancelled

有了这个,你的连接结果应该是你想要的。


推荐阅读