子串 pandas 数据框的最佳方式

best way for substring pandas data frame

Q1

我想从 concat 数据框的 Name 属性中提取每个人的标题。这样做的最佳方法是什么?

concat['Title'][concat['Title'] == 'Mlle'] = 'Miss'
concat['Title'][concat['Title'] == 'Ms'] = 'Miss'
concat['Title'][concat['Title'] == 'Mme'] = 'Mrs'
concat['Title'][concat['Title'] == 'Dona' or 'Lady'or 'Countess'or'Capt' or 'Col'or'Don'or 'Dr'or 'Major'or 'Rev'or 'Sir'or 'Jonkheer' ] = 'Rare'

Q2

当我 运行 上面的代码我得到这个错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

为什么?


参考文献

数据集的全部问题:Titanic

"extract"是什么意思不清楚。

以下有帮助吗?

import pandas as pd

df = pd.DataFrame([{'id': 1 , 'title' : 'mrs'},
                  {'id': 2 , 'title' : 'mr'},
                  {'id': 3 , 'title' : 'mr'},
                  {'id': 4 , 'title' : 'mrs'}])

df[df.title == 'mrs']
#   id title
#0   1   mrs
#3   4   mrs

df[((df.title == 'mrs') | (df.title == 'mr'))]
#   id title
#0   1   mrs
#1   2    mr
#2   3    mr
#3   4   mrs

使用str.split,然后从结果列表中提取第二项。

In [37]: df['Name'].head()
Out[37]: 
0                              Braund, Mr. Owen Harris
1    Cumings, Mrs. John Bradley (Florence Briggs Th...
2                               Heikkinen, Miss. Laina
3         Futrelle, Mrs. Jacques Heath (Lily May Peel)
4                             Allen, Mr. William Henry
Name: Name, dtype: object

这里的观察是名称遵循以下格式:姓氏称呼 名字.我们将拆分空格并使用 df.apply:

从拆分列表中提取 Salutation
In [38]: df['Title'] = df['Name'].str.split(' ').apply(lambda x: x[1])

In [39]: df['Title'].head()
Out[39]: 
0      Mr.
1     Mrs.
2    Miss.
3     Mrs.
4      Mr.
Name: Title, dtype: object

从数据集的姓名特征中提取Mr. Mrs. Miss. Capt. Master

for _ in data:
data['Title'] = dataset['Name'].str.extract(' ([A-Za-z]+)\.', expand = False)