我已经在这个主题上搜索了很多,但找不到任何现有的问题来解决这个特定的问题。我对编码和python很陌生。
我正在读取多个结构相似的excel源数据文件,但是列标题是不可预测的,因为顺序可以更改,某些文件中缺少某些列标题,而其他文件中没有。import pandas as pd
import glob
import csv
import os
outfile = open('./output/output.csv','w')
big_df = pd.DataFrame()
dataList = []
path = "./files/"
#load xlsx files from directory
allFiles = glob.glob(os.path.join(path, "*.xlsx"))
# loop through each file, finding the right sheet
for f in allFiles:
try:
#read sheet as dataframe and append to list
df = pd.read_excel(f, index_col=None, header=0, sheetname='sheetToRead')
dataList.append(df)
except:
[handle error]
#concatenate the list into a dataframe
big_df = pd.concat(dataList)
#output the dataframe to csv
big_df.to_csv(outfile)
当所有的excel工作表都有相同的列集时,这段代码工作得很好,但是我有大量的源文件要遍历,而且其中很多都有不可预知的列标题和列标题的顺序,例如:
文件示例1:col1 col2 col3 col4
apple orange banana tangerine
文件示例2:col1 col3 col4 col5
green violet red azul
文件示例3:col2 col4 col5 col6
cactus bonsai oak sycamore
有太多的列组合,我想自动读取列标题并在输出文件中同步它们,使用列标题字符串作为键,因此输出包含所有列,但只打印没有列/数据的空行/Nan,例如
输出文件:col1 col2 col3 col4 col5 col6
apple orange banana tangerine Nan Nan
green Nan violet red azul Nan
Nan cactus Nan bonsai oak sycamore
最后,这里是我在尝试对这些类型的文件运行代码时遇到的错误:Traceback (most recent call last):
File "\script.py", line 27, in
big_df = pd.concat(dataList)
File "C:\Python35-32\lib\site-packages\pandas\tools\merge.py", line 845, in concat
copy=copy)
File "C:\Python35-32\lib\site-packages\pandas\tools\merge.py", line 878, in __init__
raise ValueError('No objects to concatenate')
ValueError: No objects to concatenate
欢迎任何建议,不一定非要用熊猫。