Python split()函数工作不正常
尝试使用Pandas series str.split()函数拆分数据框“Actors”列中的值时,得到的值比我指定的拆分多:Python split()函数工作不正常,python,pandas,dataframe,split,Python,Pandas,Dataframe,Split,尝试使用Pandas series str.split()函数拆分数据框“Actors”列中的值时,得到的值比我指定的拆分多: df['Actors'] = df['Actors'].str.split(",",n=3) 1 [timrobbins, morganfreeman, bobgunton, william... 2 [marlonbrando, alpacino, jamescaan, richardsca... 3 [alpacino, robert
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
或者,如果我使用如下所示的apply函数尝试代码段,则会获得正确的结果:
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)
使用
df['Actors']=df['Actors'].str.split(“,”,n=3)[:3]
不是对字符串进行切片,而是对系列进行切片。这就是为什么从第四行开始得到NaN
s。使用[:2]重试,您将从第三行获得NaN
s
使用.apply(lambda x:x[:n])
可以对实际的单个字符串进行切片
或者,如果您不想使用.apply()
,可以使用以下命令对每行内容而不是序列本身进行切片:
df['Actors']=df['Actors'].str.split(“,”).str[:3]
您使用的是df['Actors']=df['Actors'].str.split(“,”,n=3)[:3]
不是对字符串进行切片,而是对系列进行切片。这就是为什么从第四行开始得到NaN
s。使用[:2]重试,您将从第三行获得NaN
s
使用.apply(lambda x:x[:n])
可以对实际的单个字符串进行切片
或者,如果您不想使用.apply()
,可以使用以下命令对每行内容而不是序列本身进行切片:
df['Actors']=df['Actors'].str.split(“,”).str[:3]
我刚刚找到了一种方法来完成这项工作。到目前为止,我还没有一个解释。也许你们可以帮我解释一下,但这段话实际上很管用:
df['Actors'] = df['Actors'].str.split(",").str[: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
我刚刚找到了一个方法来完成这件事。到目前为止,我还没有一个解释。也许你们可以帮我解释一下,但这段话实际上很管用:
df['Actors'] = df['Actors'].str.split(",").str[: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
IIUC,您现在想知道str.split(“,”,n=3)[:3]
和str.split(“,”).str[:3]
str.split(“,”,n=3)[:3]
在'上从左向右拆分,
并拆分3次。拆分的输出是一个系列,其中每一行都是一个列表。接下来,在输出上调用[:3]
。它对输出的前3行进行切片,并仅返回新的3行序列
df['Actors']=df['Actors'].str.split(“,”,n=3)[:3]
是序列赋值。序列分配在索引上对齐。任何df['Actors']。输出3行序列中不存在索引
,将在值中指定为NaN
。这就是finaldf['Actors']
只有3行有值,其余的是NaN
在df['Actors'].str.split(“,”).str[:3]
上,它是Pandas索引.str
。也就是说,它是pandas str访问器的内置功能。它通过传递给[]
的数字在每行上对整个序列进行切片。您可以在此处阅读更多内容:。它返回与原始序列相同的长度(行数相同)序列,其中每行值都被[]
IIUC中的数字分割,现在您想知道str.split(“,”,n=3)[:3]
和str.split(,”).str[:3]
str.split(“,”,n=3)[:3]
在'上从左向右拆分,
并拆分3次。拆分的输出是一个系列,其中每一行都是一个列表。接下来,在输出上调用[:3]
。它对输出的前3行进行切片,并仅返回新的3行序列
df['Actors']=df['Actors'].str.split(“,”,n=3)[:3]
是序列赋值。序列分配在索引上对齐。任何df['Actors']。输出3行序列中不存在索引
,将在值中指定为NaN
。这就是finaldf['Actors']
只有3行有值,其余的是NaN
在df['Actors'].str.split(“,”).str[:3]
上,它是Pandas索引.str
。也就是说,它是pandas str访问器的内置功能。它通过传递给[]
的数字在每行上对整个序列进行切片。您可以在此处阅读更多内容:。它返回与原始序列相同的长度(行数相同)序列,其中每行值按[]
中的数字进行切片。您不会得到比指定值更多的值。很难说,因为逗号是值之间的分隔符,也是原始数据中的分隔符,并且它不会在字符串周围显示引号。您将获得[“timrobbins”,“morganfreeman”,“bobgunton,william…”]
请尝试使用以下几行下载jupyter笔记本或i-python shell中的数据一次:df=pd.read_csv(')df['Actors']=df['Actors'].str.strip().str.lower().str.replace(“[^a-zA-Z,]”,“”)df['Actors']=df['Actors'].str.split(“,”,n=3)df['Actors'].head()。这将使您更好地理解数据。我不使用jupyter或i-python。您有任何可用的示例数据吗?问题是,n=3
并不意味着在第三项之后放弃所有内容。这意味着所有内容都包含在第三项值中。您得到的值不会超过您指定的值。很难确定告诉,因为逗号是值之间的分隔符,也是原始数据中的分隔符,并且它不会在字符串周围显示引号。您将获得[“timrobbins”,“morganfreeman”,“bobgunton,william…”
请尝试使用以下行在jupyter笔记本或i-python shell中下载数据一次:df=pd.read\u csv(')df['Actors']=df['Actors'].str.strip().str.lower()