按分隔符将 Pandas Series 拆分为 DataFrame
Split Pandas Series into DataFrame by delimiter
在这种情况下,我试图通过特定的分隔符 "; "
拆分 pandas
series
对象。我想把它变成一个 dataframe
总是会有相同数量的 "columns" 或者更准确地说,相同数量的 "; "
将指示列。我认为这可以解决问题,但它没有 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
您可以使用 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
与参数 expand=True
一起使用,并作为数据参数传递给 DataFrame
构造函数:
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
在这种情况下,我试图通过特定的分隔符 "; "
拆分 pandas
series
对象。我想把它变成一个 dataframe
总是会有相同数量的 "columns" 或者更准确地说,相同数量的 "; "
将指示列。我认为这可以解决问题,但它没有 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
您可以使用 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
与参数 expand=True
一起使用,并作为数据参数传递给 DataFrame
构造函数:
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