子串 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)
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
:
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)