新列中的部分字符串切片(或字符串拆分?)

时间:2017-02-24 00:15:59

标签: python string pandas

我试图找出如何从列中的一组单词中删除单词并将删除的单词插入到新列中。我想出了如何删除列的一部分并将其插入新行,但我无法弄清楚如何定位特定单词(通过我假设的位置;“先生”始终是第二个单词;或者可能是通过采取第一个“,”和“。”之间的单词,它在我的数据集中也总是不变的。)

Name             Age  New_Name
Doe, Mr. John     23     Mr.
Anna, Mrs. Fox    33     Mrs.

编辑以上内容以添加另一行

我如何删除“先生”从名称列中将其插入“New_Name”列?

到目前为止,我已提出:

data['New_name'] = data.Name.str[:2]

这不允许我专门针对“先生”虽然。

我想我必须使用string.split,但确切的代码是在逃避我。

4 个答案:

答案 0 :(得分:2)

如果Mr.总是处于您的示例所指示的相同位置,则可以使用列表插值来完成:

df['New_Name'] = [x.split(' ')[1] for x in df['Name']]

d['Name'] = [' '.join(x.split(' ')[::2]) for x in d['Name']]

答案 1 :(得分:1)

name = "Doe, Mr. John"

# if you always expect a title (Mr/Ms) between comma and dot
# split to lastname, title and firstname and strip spaces
newname = [ n.strip() for n in name.replace(".", ",").split(",") ]

print(newname)
#> ['Doe', 'Mr', 'John']

然后您可以打印标题和名字 - 姓氏列或其他组合。

答案 2 :(得分:1)

首先,您必须从名称(它在逗号和点之间)获取标题并将其存储到另一列。然后重复此操作以从“名称”列中删除标题:

import pandas as pd

df = pd.DataFrame({'Name':['Doe, Mr. John', 'Anna, Ms. Fox'], 'Age':[23,33]})
df['New_Name'] = df['Name'].apply(lambda x: x[x.find(',')+len(','):x.rfind('.')]+'.')
df['Name'] = df['Name'].apply(lambda x: x.replace(x[x.find(',')+len(','):x.rfind('.')]+'.',''))
print df

输出:

   Age       Name New_Name
0   23  Doe, John      Mr.
1   33  Anna, Fox      Ms.

答案 3 :(得分:1)

您可以使用pandas str.replace和str.extract方法

首先提取标题以形成新列

df['New_Name'] = df['Name'].str.extract(',\s([A-Za-z]+.)') 

然后使用replace将提取的字符串替换为空字符串

df['Name'] = df['Name'].str.replace('\s([A-Za-z]+.)\s', ' ')

你得到:

    Age Name        New_Name
0   23  Doe, John   Mr.