“ all_df [col] .str.split(”;“,2).str”输出什么?

时间:2019-02-25 08:53:35

标签: python pandas

我正在尝试将形状为:“ StringA; StringB; StringC”和“;”的列分开。我最初尝试过:

df[col_a], df[col_b], df[col_c] = df[col].str.split(",", 2)

但是要意识到不一定总是有3个字符串,所以有许多行以“ StringA; StringB”的形式出现。我在网上找到了以下解决方案:

df[col_a], df[col_b], df[col_c] = df[col].str.split(",", 2).str

这行代码可以正常工作。它只是给col_c NaN的值。我对添加'str'的工作方式有些困惑。

感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

.str访问者

基本上,它的作用是让您将Series个对象特别视为Series个可迭代对象(在此情况下为列表)。

应用split之后,df[col中的每个元素现在都包含一个列表。例如,您可以执行df[col].str.split(',').str[0],它将为您提供df[col]中每个列表的第一个元素。

通过将.str的结果分配给单个Series,您将执行tuple的矢量化解包形式,类似于a, b, c = (1, 2, 3),但对于每个元素 Series

示例:

>>> data = [['first;second;third'], ['first;second'], ['second;third;fourth'], ['fourth']]
>>> 
>>> series = pd.DataFrame(data, columns=['string'])['string']
>>> split = series.str.split(';')
>>> split
0     [first, second, third]
1            [first, second]
2    [second, third, fourth]
3                   [fourth]
Name: string, dtype: object

>>> split.str[0]
0     first
1     first
2    second
3    fourth
Name: string, dtype: object

另请参阅我的答案here