我曾尝试根据this帖子中的建议使用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)
答案 0 :(得分:1)
这里的问题是您没有以自己的方式读文件; 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
有了这个,连接的结果应该如您所愿。