【发布时间】:2021-10-10 04:59:35
【问题描述】:
之后我总是可以 .fillna() 。但我正在尝试将“OTHER”的值作为重新编码字典的一部分。我认为 defaultdict 可能很合适,但它的行为似乎像一个生成器,并且 pandas Series.replace() 似乎不会为代码中之前未请求的键生成结果。
示例代码:
import pandas as pd
from collections import defaultdict
recode = defaultdict(lambda:"Unknown", {
1 : "Yes",
2 : "No"
})
print("key 0:", recode[0]) # Will generate a key-value for the key "0"
df = pd.DataFrame(pd.Series([0,1,2,5]), columns = ["code"])
df['answer'] = df['code'].replace(recode)
print(df)
将生成此输出:
key 0: Unknown
code answer
0 0 Unknown
1 1 Yes
2 2 No
3 5 5
因此,由于我们在 recode[0] 上调用了 print(),因此会生成它,并且可以由 pd.Series.replace() 使用,但 recode[5] 只能由 pd.Series.replace() 搜索,并且因此不会像我预期的那样被“未知”取代。
建议? (关于如何在重新编码数据结构中包含“其他”)
接受的答案
基于Anurag Dabass 的回答,您可以只使用地图...
recode = defaultdict(lambda:"Unknown", {
1 : "Yes",
2 : "No",
None: "Ah shit"
})
df['answer'] = df['code'].map(recode)
输出:
code answer
0 0 Unknown
1 1 Yes
2 2 No
3 5 Unknown
【问题讨论】:
标签: python pandas replace collections defaultdict