我有大约50个excel文件&我想导入到dataframe并将所有文件合并到单个数据帧中。 但有些文件有3个,有些是4列。每个文件都以不同的顺序排列为不同的列。
所有文件中的不同列总数:5,即col1,col2,col3,col4,col5
我知道如何导入,但在面临问题的时候。
脚本:
dfAll = pd.DataFrame(columns=['col1', 'col2', 'col3', 'col4', 'col5')]
df= pd.read_excel('FilePath', sheetname='data1') # contains 3 columns i.e col1, col2, col5
columnsOFdf = df.columns
dfAll[columnsOFdf] = dfAll.append(df)
但它的给定错误" ValueError:列的长度必须与键的长度相同"
我想将 df [' col1',' col2',' col5'] 数据附加到 dfAll [ ' COL1'' COL2'' COL5']
请帮助解决这个问题。
答案 0 :(得分:3)
连接将匹配您的列
dfs = []
files = [...]
for file_name in files:
dfs.append(pd.read_excel(file_name, sheetname='data1'))
df = pd.concat(dfs)
df1 = pd.DataFrame(np.random.randn(3, 3), columns=list('ABC'))
df2 = pd.DataFrame(np.random.randn(3, 3), columns=list('BCD'))
>>> pd.concat([df1, df2])
A B C D
0 -2.329280 0.644155 -0.835137 NaN
1 0.666496 -1.299048 0.111579 NaN
2 1.855494 -0.085850 -0.541890 NaN
0 NaN -1.131514 1.023610 -0.514384
1 NaN 0.670063 1.403143 -0.978611
2 NaN -0.314741 -0.727200 -0.620511
此外,每次将数据框附加到现有数据框时,都会返回副本。这将严重降低性能并被称为二次复制。您最好创建所有数据帧的列表,然后连接结果。
答案 1 :(得分:2)
试试这个:
[dfAll.append(i) for i in df]
我希望这对你有所帮助。
答案 2 :(得分:1)
一种解决方案是将空列添加到从Excel文件加载的数据框中:
columns = ['col1', 'col2', 'col3', 'col4', 'col5']
dfAll = pd.DataFrame(columns=columns)
df= pd.read_excel('FilePath', sheetname='data1') # contains 3 columns i.e col1, col2, col5
columnsOFdf = df.columns
for column in columns:
if column not in columnsOFdf:
df[column] = [""] * df.shape[0]
dfAll.append(df)