首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫数据共享最大

熊猫数据共享最大
EN

Stack Overflow用户
提问于 2020-01-16 17:32:51
回答 2查看 725关注 0票数 1

我有一个包含单个名称的列的dataframe。名称并不总是相同的格式,所以我尝试将名字和姓氏分割成不同的列。例如,我可以看到:

代码语言:javascript
复制
Smith John

Smith, John

Smith, John A

Smith John A

Smith John and Jane

一致的模式是姓第一。如何为姓氏创建两个单独的字段,然后创建第二列,即所有内容,而不是姓氏。这是我到目前为止所拥有的

代码语言:javascript
复制
owners_df['normal_name'] = owners_df['name'].str.replace(', ', ' ')
owners_df['lastname'] = owners_df["normal_name"].str.split(' ', 1)[0]
owners_df['firstname'] = owners_df["normal_name"].str.split(' ', 1)[1]

问题是我得到了一个错误"ValueError:值的长度不匹配索引的长度“

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-16 17:52:44

正如@Datanovice在评论中已经说过的那样,“当您运行此owners_df["normal_name"].str.split(' ', 1)[0]时,您只获取第一行”。

使用.str访问器获得预期的输出

代码语言:javascript
复制
owners_df['lastname'] = owners_df["normal_name"].str.split(' ', n=1).str[0]
owners_df['firstname'] = owners_df["normal_name"].str.split(' ', n=1).str[1]

见文档注意到n参数将拆分限制为一次。

票数 4
EN

Stack Overflow用户

发布于 2020-01-16 17:52:04

你在分手后要找.str[0].str[1:]

代码语言:javascript
复制
ser=pd.Series(['Smith John',
'Smith John',
'Smith John A',
'Smith John A',
'Smith John and Jane'])

ser.str.split(' ').str[0]

0    Smith
1    Smith
2    Smith
3    Smith
4    Smith

#leaving off the .str.join will give a list, which may be preferable in some use cases
ser.str.split(' ').str[1:].str.join(' ') 

0             John
1             John
2           John A
3           John A
4    John and Jane

如果您只想将每个元素移动到一个单独的列,则可以传递expand=True

代码语言:javascript
复制
ser.str.split(' ', expand=True)

    0       1       2       3
0   Smith   John    None    None
1   Smith   John    None    None
2   Smith   John    A       None
3   Smith   John    A       None
4   Smith   John    and     Jane
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59775009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档