使用空格将{Pandas Column >>拆分为多个

时间:2018-04-22 06:20:08

标签: pandas numpy

我有多个源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文件合并到数据框中,或者可以修改此脚本以有效地实现我的目标?

1 个答案:

答案 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 comprehensionconcat一起用于大型DataFrame:

big_frame = pd.concat([pd.read_excel(f, index_col=None, header=0)[:-1] for f in allFiles])