首页 > 解决方案 > Pandas str.split() 函数无法正常工作

问题描述

在尝试使用 Pandas 系列 str.split() 函数拆分我的数据框的“Actors”列中的值时,我得到的值比我指定的拆分要多:

df['Actors'] = df['Actors'].str.split(",",n=3)

1      [timrobbins, morganfreeman, bobgunton, william...
2      [marlonbrando, alpacino, jamescaan, richardsca...
3      [alpacino, robertduvall, dianekeaton, robertde...
4      [christianbale, heathledger, aaroneckhart, mic...
5      [martinbalsam, johnfiedler, leejcobb, egmarshall]

如果我尝试使用下面的代码片段对上述结果进行切片,则 NaN 开始出现在结果中:

df['Actors'] = df['Actors'].str.split(",",n=3)[:3]
df['Actors'].head()

1    [timrobbins, morganfreeman, bobgunton, william...
2    [marlonbrando, alpacino, jamescaan, richardsca...
3    [alpacino, robertduvall, dianekeaton, robertde...
4                                                  NaN
5                                                  NaN
Name: Actors, dtype: object

或者,如果我尝试使用如下所示的应用函数的代码段,则会获得正确的结果:

df['Actors'] = df['Actors'].apply(lambda x: x.split(",")[:3])
df['Actors'].head()

1        [timrobbins, morganfreeman, bobgunton]
2           [marlonbrando, alpacino, jamescaan]
3         [alpacino, robertduvall, dianekeaton]
4    [christianbale, heathledger, aaroneckhart]
5         [martinbalsam, johnfiedler, leejcobb]
Name: Actors, dtype: object

我想知道为什么会发生这种异常以及在这种情况下如何正确使用 str.split() 函数?

要进一步检查数据,您可以使用以下代码片段自行下载数据:

df = pd.read_csv('https://query.data.world/s/uikepcpffyo2nhig52xxeevdialfl7',index_col=0)

标签: pythonpandasdataframesplit

解决方案


str.split(",",n=3)[:3]IIUC,您现在想知道和之间有什么不同str.split(",").str[:3]

str.split(",",n=3)[:3]从左到右','拆分并拆分 3 次。拆分的输出是每行是一个列表的系列。接下来,调用[:3]输出。它对输出的前 3 行进行切片,并仅返回新的 3 行系列。

df['Actors'] = df['Actors'].str.split(",",n=3)[:3]是系列作业。系列分配在索引上对齐。输出 3 行系列中不存在的任何df['Actors'].index内容将按NaN值分配。这就是最终df['Actors']只有 3 行具有值的原因,其余的是NaN

df['Actors'].str.split(",").str[:3]了,是熊猫Indexing with .str。即,它是 pandas str 访问器的内置功能。它通过传递给的数字对每一行的整个系列进行切片[]。您可以在这里阅读更多内容:https ://pandas.pydata.org/pandas-docs/stable/user_guide/text.html#indexing-with-str 。它返回与原始序列相同长度(相同行数)的序列,其中每行值都被内部的数字分割[]


推荐阅读