python-apply(lambda x:…)函数,当值是一个系列或数据帧时应用于字典值
我试图对作为数据帧的字典值使用apply(lambda x:…)函数,但得到的是ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。我知道这在dataframe列上有效。但我想知道是否有一种方法可以在字典值上使用它。我做错了什么python-apply(lambda x:…)函数,当值是一个系列或数据帧时应用于字典值,python,pandas,dictionary,lambda,apply,Python,Pandas,Dictionary,Lambda,Apply,我试图对作为数据帧的字典值使用apply(lambda x:…)函数,但得到的是ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。我知道这在dataframe列上有效。但我想知道是否有一种方法可以在字典值上使用它。我做错了什么 import pandas as pd df = pd.DataFrame({'Gender':['M','M','M','F','F','O1','O2'],
import pandas as pd
df = pd.DataFrame({'Gender':['M','M','M','F','F','O1','O2'],
'A1':[2,4,8,7,6,4,5],'A2':[2,4,8,7,6,4,5],
'B1':[5,8,9,7,5,6,3]})
df
#> Gender A1 A2 B1
0 M 2 2 5
1 M 4 4 8
2 M 8 8 9
3 F 7 7 7
4 F 6 6 5
5 O1 4 4 6
6 O2 5 5 3
dct = {}
for cat in ['Gender','A','B']:
dct[cat] = df[[c for c in df.columns if c.startswith(cat)]]
dct
#> {'Gender': Gender
0 M
1 M
2 M
3 F
4 F
5 O1
6 O2,
'A': A1 A2
0 2 2
1 4 4
2 8 8
3 7 7
4 6 6
5 4 4
6 5 5,
'B': B1
0 5
1 8
2 9
3 7
4 5
5 6
6 3}
## apply
g = dct['Gender'].apply(lambda x: 'Other' if x not in ['M','W'] else x]
#> ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
所需输出:
Gender
0 M
1 M
2 M
3 F
4 F
5 Other
6 Other
问题:
m = df['Gender'].str.fullmatch(r'[^MF]')
df.loc[m, 'Gender'] = 'Other'
print(df)
# Gender A1 A2 B1
# 0 M 2 2 5
# 1 M 4 4 8
# 2 M 8 8 9
# 3 F 7 7 7
# 4 F 6 6 5
# 5 Other 4 4 6
# 6 Other 5 5 3
- 关于正则表达式模式的详细信息
- 你可以试试
dct['Gender']['Gender'].apply(lambda x: 'Other' if x not in ['M','W'] else x)
# Output:
0 M
1 M
2 M
3 Other
4 Other
5 Other
6 Other
Name: Gender, dtype: object
dct['Gender']
作为一个整体访问值(这里是一个数据帧)
dct['Gender']['Gender']
访问数据帧中作为值的列。然后,就可以对其使用apply()函数
type(dct['Gender']['Gender'])
#> pandas.core.series.Series
文档:熊猫。系列。应用
调用系列值的函数。我无法使用Ch3steR答案中的一行解决方案作为
fullmatch
(可能不同版本?)
df.loc[~df.Gender.isin(['M','F']),'Gender']='Others'
请您解释一下r'[^MF]'
中的所有组件都做了什么或表示了什么?在str.match函数中用“[]”括起时会发生什么情况?你做什么?为什么不需要在MF之间插入逗号?r'xxx'有什么帮助?@rahul ahuja这是正则表达式模式。详情
type(dct['Gender']['Gender'])
#> pandas.core.series.Series