【问题标题】:Split Pandas Series into DataFrame by delimiter通过分隔符将 Pandas 系列拆分为 DataFrame
【发布时间】:2016-09-10 11:26:58
【问题描述】:

在这种情况下,我试图用特定的分隔符 "; " 拆分 pandas series 对象。我想把它变成dataframe,总会有相同数量的“列”,或者更准确地说,相同数量的"; " 将指示列。我认为这可以解决问题,但它没有 python, how to convert a pandas series into a pandas 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

【问题讨论】:

  • EdChum 和 Jezrael,谁先回答?我要公平。这些都是很好的答案,正是我想要的。
  • 我想我是第一个,但差别只是15 seconds。所以我不知道这是否重要。 @EdChum,你怎么看?

标签: python pandas dataframe split series


【解决方案1】:

你可以使用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

另一个更快的解决方案,如果 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

时间安排

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

【讨论】:

  • 迭代更快?
  • 是的,如果如果使用这种方式。 str.split 有点慢,因为它也可以很好地处理 NaN 值。
【解决方案2】:

使用矢量化的str.split 和参数expand=True 并作为数据arg 传递给DataFrame ctor:

In [4]:
df = pd.DataFrame(SR_test.str.split(';',expand=True))
df

Out[4]:
    0    1    2    3    4
0   a    b    c    d    e
1  aa   bb   cc   dd   ee
2  a1   b2   c3   d4   e5

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-08
    • 2018-03-17
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多