我有多个源Excel文件需要合并为一个。所有源文件只有一列,其数据格式为General,行中的值如下所示:
D0200000001104566 000153536 Q773 00000
D0200000001104566 000157902 Q322 00000
D0200000001104566 143253486 Q339 00000
在零之后有更多的数字和字母,它们之间有不同的空格数每行700个字符,但不认为有必要在这里显示。目标是使输出Excel文件具有两列具有如下格式的数据:
A B
104566 000153536
104566 000157902
104566 143253486
使用下面的代码here,我能够将Excel结合起来将文件放入数据帧然后发布Excel文件:
import os
import glob
import pandas as pd
import numpy as np
#setting variables
path = <file path>
allFiles = glob.glob.(os.path.join(path,"*.xlsx"))
outfile = <file path>
#looping through excel files to merge into one file
np_array_list = []
for file_ in allFiles:
df = pd.read_excel(file_, index_col=None, header=0)
df = df[:-1]
np_array_list.append(df.as_matrix())
comb_np_array = np.vstack(np_array_list)
big_frame = pd.DataFrame(comb_np_array), columns=['A'])
#publishing dataframe as one excel file
print("Hang in there...should be done quick")
big_frame.to_excel(outfile,index=None)
我遇到两件事情有困难。
1。弄清楚如何将big_frame的一列拆分为2,以便输出的Excel文件具有所需的格式。我尝试在发布Excel文件之前添加以下行,
big_frame = big_frame.A.str.split(" ", expand=True)
在尝试拆分之前尝试将A列转换为字符串(但这非常低效!!!),然后是其他一些建议,但没有成功。
2。删除前11个字符。
我是否应该使用与此脚本完全不同的方法将我的Excel文件合并到数据框中,或者可以修改此脚本以有效地实现我的目标?
答案 0 :(得分:1)
我认为需要首先删除11
之前的str[]
值,然后使用不带分隔符的split
,因为空格是默认的sep:
df = big_frame['A'].str[11:].str.split(expand=True)[[0,1]]
df.columns = ['A','B']
print (df)
A B
0 104566 000153536
1 104566 000157902
2 104566 143253486
如果没有NaN
可能,请使用列表理解:
df = pd.DataFrame([x[11:].split()[:2] for x in big_frame['A']], columns=['A','B'])
编辑:
您还可以将list comprehension
与concat
一起用于大型DataFrame:
big_frame = pd.concat([pd.read_excel(f, index_col=None, header=0)[:-1] for f in allFiles])