python - 在 Pandas 数据框中切片字符串并分配一个新列

标签 python string pandas

您好,我有以下数据框:

df = pd.DataFrame()
df['Name'] = ['P. John','Merry','P. John travis']
df['First_Name'] = df.Name.str.split('.', expand = True)[0]
df['Last_Name'] = df.Name.str.split('.', expand = True)[1]

我想根据句点“.”对列进行切片。并用作姓氏。 除了“快乐”,我可以为所有人做,它显示 None 如下:

0            John
1            None
2     John travis

如何将 last name 中的所有 None 替换为 First Name? A 在论坛中搜索,没有找到。

第二个问题是我有另一个数据框如下:

df1 = pd.DataFrame({'Name':['John','Merry','John travis'],"Position":['CEO','CTO','Engr']})

我正在使用 map 函数为 df 创建一个新列 ** Position**。

 df ['Position'] = df.Last_Name.map (df1.set_index('Name').Position)

但 df 中的新列显示了一些 Nan 值,如下所示: enter image description here

我在这篇文章中展示的数据框复制了我正在解决的实际问题。 但是,在实际问题中使用 map 功能会给我以下错误代码:

Reindexing only valid with uniquely valued Index objects.

有人可以就此给我建议吗?

谢谢。

最佳答案

您可以将代码简化一个 split带参数 n=1按第一个 . 拆分如果可能多个一个然后替换None通过 fillna :

df = pd.DataFrame({'Name':['P. John','Merry','P. John travis']})

df[['First_Name', 'Last_Name']] = df.Name.str.split('.\s+', expand = True, n=1)
#if always only one .
#df[['First_Name', 'Last_Name']] = df.Name.str.split('.\s+', expand = True, n=1)
df['Last_Name'] = df['Last_Name'].fillna(df['First_Name'])
print (df)
             Name First_Name     Last_Name
0         P. John          P          John
1           Merry      Merry         Merry
2  P. John travis          P   John travis

或者删除expand=True对于 Series of list s 并选择第一个和最后一个值:

splitted = df.Name.str.split('.\s+', n=1)
df['first_Name'] = splitted.str[0]
df['Last_Name'] = splitted.str[-1]
print (df)
             Name first_Name     Last_Name
0         P. John          P          John
1           Merry      Merry         Merry
2  P. John travis          P   John travis

关于python - 在 Pandas 数据框中切片字符串并分配一个新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51649149/

相关文章:

python - 如何从sqlite中读取日期时间作为日期时间而不是Python中的字符串?

Python 导入模块为 None

javascript 在 . 之后抓取字符串的一部分。 (点)

javascript - 返回搜索到的字符串 + 上一个和下一个单词

python - 在 Pandas 数据框中,如何按时间连接由组标识的行数据?

python - 将函数应用于 pandas 数据帧的每一列而不使用 for 循环?

python - python中的数字格式

python - 如何在 Django 中调试 'Not all temporary messages could be stored' 值错误?

regex - Notepad++ Regex 获取以 HTML 中的字符串开头的所有完整链接

python - 与组比较值 - pandas