2013-11-12 2 views
1

Сценария здесь является то, что у меня есть dataframe сырьёх целочисленных данных, а ДИКТ, который отображает этот Интс в строку значенияЕсть ли способ сделать это на Series.map?

Мне нужно заменить значения в dataframe с соответствующими значениями из карты, но сохраните исходное значение, если оно не сопоставимо ни с чем.

До сих пор единственный способ, которым я смог выяснить, как сделать то, что я хочу, - использовать временный столбец. Однако, с размером данных, с которыми я работаю, иногда это может быть немного волосатым. А так, мне было интересно, если есть какой-то трюк, чтобы сделать это в панд без необходимости столбец Темп ...

import pandas as pd 
import numpy as np 

data = pd.DataFrame(np.random.randint(1,5, size=(100,1))) 
map_array = {1:'one', 2:'two', 4:'four'} 

data['__temp__'] = data[0].map(map_array, na_action=None) 
#I've tried varying the na_action arg to no effect 

nan_index = data['__temp__'][data['__temp__'].isnull() == True].index 
data['__temp__'].ix[nan_index] = data[0].ix[nan_index] 
data[0] = data['__temp__'] 
data = data.drop(['__temp__'], axis=1) 

ответ

4

Я думаю, вы можете просто использовать .replace, будь то на DataFrame или в Series:

>>> df = pd.DataFrame(np.random.randint(1,5, size=(3,3))) 
>>> df 
    0 1 2 
0 3 4 3 
1 2 1 2 
2 4 2 3 
>>> map_array = {1:'one', 2:'two', 4:'four'} 
>>> df.replace(map_array) 
     0  1 2 
0  3 four 3 
1 two one two 
2 four two 3 
>>> df.replace(map_array, inplace=True) 
>>> df 
     0  1 2 
0  3 four 3 
1 two one two 
2 four two 3 

Я не уверен, что произойдет с удалением памяти при изменении столбцов dtypes.

+0

спасибо. хит для изменения типов столбцов - это тот, который мне нужно принимать в любом случае, так что все в порядке. – badideas

Смежные вопросы