【发布时间】:2019-11-08 21:24:07
【问题描述】:
在尝试使用 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]
如果我尝试使用下面的 sn-p 对上述结果进行切片,则 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 函数尝试 sn-p,则可以得到正确的结果:
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() 函数?
要进一步检查数据,您可以使用以下 sn-p 代码自行下载数据:
df = pd.read_csv('https://query.data.world/s/uikepcpffyo2nhig52xxeevdialfl7',index_col=0)
【问题讨论】:
-
您获得的价值不会超过您指定的值。这很难说,因为逗号是值之间的分隔符,也是原始数据中的分隔符,它不会在字符串周围显示引号。你会收到
["timrobbins", "morganfreeman", "bobgunton, william..."] -
请尝试使用以下行在您的 jupyter notebook 或 i-python shell 中下载数据一次: df = pd.read_csv('query.data.world/s/…) df['Actors'] = df[ '演员'].str.strip().str.lower().str.replace("[^a-zA-Z,]","") df['演员'] = df['演员']。 str.split(", ",n=3) df['Actors'].head() 。这将使您更好地了解数据
-
我不使用 jupyter 或 i-python。
-
您有任何可用的示例数据吗?
-
重点是
n=3并不意味着在第三项之后丢弃所有内容。这意味着它们都包含在第三个值中。
标签: python pandas dataframe split