我有一个包含单个名称的列的dataframe。名称并不总是相同的格式,所以我尝试将名字和姓氏分割成不同的列。例如,我可以看到:
Smith John
Smith, John
Smith, John A
Smith John A
Smith John and Jane一致的模式是姓第一。如何为姓氏创建两个单独的字段,然后创建第二列,即所有内容,而不是姓氏。这是我到目前为止所拥有的
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:值的长度不匹配索引的长度“
发布于 2020-01-16 17:52:44
正如@Datanovice在评论中已经说过的那样,“当您运行此owners_df["normal_name"].str.split(' ', 1)[0]时,您只获取第一行”。
使用.str访问器获得预期的输出
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参数将拆分限制为一次。
发布于 2020-01-16 17:52:04
你在分手后要找.str[0]和.str[1:]。
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
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 Janehttps://stackoverflow.com/questions/59775009
复制相似问题