我正在尝试将形状为:“ 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'的工作方式有些困惑。
感谢任何帮助!
答案 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。