python - 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)
解决方案
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 。它返回与原始序列相同长度(相同行数)的序列,其中每行值都被内部的数字分割[]
。
推荐阅读
- c# - 在 Button 动画的路径上绘制轨迹
- apache-camel - 在 apache camel 中使用 netty4 组件执行 post
- python - 使用 Python 3.5 执行 PowerShell 命令
- sql-server - SQL Server:某些列的最大值以及其他列值
- ruby-on-rails - Rails 中的正则表达式验证
- python - cross column cell validation on a dynamic QTableWidget
- javafx - How to set minHeight and minWidth to a Window in TornadoFX?
- latex - Export dataset to LaTeX
- c++ - compilation error in boost serialization, undefined reference
- r - Turning multiple String Patterns into Binary Columns