为什么不df.index.map(dict)喜欢的工作df['column_name'].map(dict)?
这是尝试使用index.map的一个小例子:
import pandas as pd
df = pd.DataFrame({'one': {'A': 10, 'B': 20, 'C': 30, 'D': 40, 'E': 50}})
map_dict = {'A': 'every', 'B': 'good', 'C': 'boy', 'D': 'does', 'E': 'fine'}
df
'''
one
A 10
B 20
C 30
D 40
E 50
'''
df['two'] = df.index.map(mapper=map_dict)
Run Code Online (Sandbox Code Playgroud)
这引起了提升 TypeError: 'dict' object is not callable
喂它一个lambda工作:
df['two'] = df.index.map(mapper=(lambda x: map_dict[x])); df
'''
one two
A 10 every
B 20 good
C 30 boy
D 40 does
E 50 fine
'''
Run Code Online (Sandbox Code Playgroud)
但是,重置索引和列上的映射可以按预期工作而无需投诉:
df.reset_index(inplace=True)
df.rename(columns={'index': 'old_ndx'}, inplace=True) #so there's no index name confusion
df['two'] = df.old_ndx.map(map_dict); df
'''
old_ndx one two
0 A 10 every
1 B 20 good
2 C 30 boy
3 D 40 does
4 E 50 fine
'''
Run Code Online (Sandbox Code Playgroud)
piR*_*red 20
我没有回答你的问题......只是给你一个更好的解决方法.
使用to_series()它们map
df = pd.DataFrame({'one': {'A': 10, 'B': 20, 'C': 30, 'D': 40, 'E': 50}})
map_dict = {'A': 'every', 'B': 'good', 'C': 'boy', 'D': 'does', 'E': 'fine'}
df['two'] = df.index.to_series().map(map_dict)
df
one two
A 10 every
B 20 good
C 30 boy
D 40 does
E 50 fine
Run Code Online (Sandbox Code Playgroud)
WeN*_*Ben 17
添加get在最后
df['Two']=df.index.map(map_dict.get)
df
Out[155]:
one Two
A 10 every
B 20 good
C 30 boy
D 40 does
E 50 fine
Run Code Online (Sandbox Code Playgroud)
从 pandas 0.23.x 版(2018 年 5 月 15 日发布)开始,此问题已修复:
import pandas as pd
pd.__version__ # 0.23.4
df = pd.DataFrame({'one': {'A': 10, 'B': 20, 'C': 30, 'D': 40, 'E': 50}})
map_dict = {'A': 'every', 'B': 'good', 'C': 'boy', 'D': 'does', 'E': 'fine'}
df
# one
# A 10
# B 20
# C 30
# D 40
# E 50
df.index.map(map_dict)
# one
# every 10
# good 20
# boy 30
# does 40
# fine 50
Run Code Online (Sandbox Code Playgroud)
从Pandas 0.23.0的新增内容页面中,它说:
Index.map() 现在可以接受系列和字典输入对象(GH12756、GH18482、GH18509)。
有关更多信息,请查看Index.map的帮助页面
小智 5
调用map的另一种解决方法:
df['two'] = pd.Series(map_dict)
df
one two
A 10 every
B 20 good
C 30 boy
D 40 does
E 50 fine
Run Code Online (Sandbox Code Playgroud)
在任何情况下,直到映射问题得到解决(根据juanpa.arrivillaga的评论),你必须将索引或dict-to-map转换为pandas系列.
| 归档时间: |
|
| 查看次数: |
16006 次 |
| 最近记录: |