通过分隔符将Pandas系列拆分为DataFrame

O.r*_*rka 6 python split series dataframe pandas

在这种情况下,我试图pandas series通过特定的分隔符拆分对象"; ".我想把它变成一个dataframe总是会有相同数量的"列"或者更确切地说,相同数量的"; "那些将表示列.我认为这会做的伎俩,但它没有python,如何将熊猫系列转换为熊猫DataFrame?我不想迭代,我敢肯定pandas已经做了一个更有效的捷径.

有谁知道将这个系列分成数据帧的最有效方法是"; "什么?

#Example Data
SR_test = pd.Series(["a; b; c; d; e","aa; bb; cc; dd; ee","a1; b2; c3; d4; e5"])
# print(SR_test)
# 0         a; b; c; d; e
# 1    aa; bb; cc; dd; ee
# 2    a1; b2; c3; d4; e5

#Convert each row one at a time (not efficient)
tmp = []
for element in SR_test:
    tmp.append([e.strip() for e in element.split("; ")])
DF_split = pd.DataFrame(tmp)
# print(DF_split)
#     0   1   2   3   4
# 0   a   b   c   d   e
# 1  aa  bb  cc  dd  ee
# 2  a1  b2  c3  d4  e5
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 11

你可以使用str.split:

df = SR_test.str.split('; ', expand=True)
print df

    0   1   2   3   4
0   a   b   c   d   e
1  aa  bb  cc  dd  ee
2  a1  b2  c3  d4  e5
Run Code Online (Sandbox Code Playgroud)

另一个更快的解决方案,如果Series没有NaN值:

print pd.DataFrame([ x.split('; ') for x in SR_test.tolist() ])
    0   1   2   3   4
0   a   b   c   d   e
1  aa  bb  cc  dd  ee
2  a1  b2  c3  d4  e5
Run Code Online (Sandbox Code Playgroud)

时间:

SR_test = pd.concat([SR_test]*1000).reset_index(drop=True)

In [21]: %timeit SR_test.str.split('; ', expand=True)
10 loops, best of 3: 34.5 ms per loop

In [22]: %timeit pd.DataFrame([ x.split('; ') for x in SR_test.tolist() ])
100 loops, best of 3: 9.59 ms per loop
Run Code Online (Sandbox Code Playgroud)