这里的场景是,我有一个包含原始整数数据的 Dataframe df
,以及一个将这些整数Map为字符串值的dict map_array
。
我需要将 Dataframe 中的值替换为Map中的相应值,但如果它没有Map到任何内容,则保留原始值。
到目前为止,我能够弄清楚如何做我想做的事情的唯一方法是使用临时列。然而,考虑到我所处理的数据的大小,这有时可能会有点麻烦。因此,我想知道是否有一些技巧可以在Pandas中做到这一点,而不需要临时列...
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(1,5, size=(100,1)))
map_array = {1:'one', 2:'two', 4:'four'}
df['__temp__'] = df[0].map(map_array, na_action=None)
#I've tried varying the na_action arg to no effect
nan_index = data['__temp__'][df['__temp__'].isnull() == True].index
df['__temp__'].ix[nan_index] = df[0].ix[nan_index]
df[0] = df['__temp__']
df = df.drop(['__temp__'], axis=1)
2条答案
按热度按时间v6ylcynt1#
我认为您可以简单地使用
.replace
,无论是在DataFrame
上还是在Series
上:不过,我不确定更改列数据类型会对内存造成多大影响。
qij5mzcb2#
map
(或 Dataframe 的applymap
)似乎更快。技巧是使用
lambda x: mapping.get(x, x)
作为Map,实际上返回默认情况下不变的值。