2015-05-18 4 views
3

Я очень новичок в python и пытаюсь получить значение из словаря, где ключи определены в столбце dataframe (pandas). Я искал довольно много, и самое близкое дело - вопрос по ссылке ниже, но он не приходит с ответом.Python: как получить значения из словаря из серии pandas

Итак, здесь я пытаюсь найти ответ для того же типа вопросов.

Select from dictionary using pandas series

меня есть словарь

type_dict = {3: 'foo', 4:'bar',5:'foobar', 6:'foobarbar'} 

и фрейм данных с помощью следующего столбца:

>>> df.type 
0  3 
1  4 
2  5 
3  6 
4  3 
5  4 
6  5 
7  6 
8  3 

Я хочу, чтобы создать новый столбец, содержащий соответствующее значение type_dict, но единственное, что я мог придумать и не работал:

type_dict[df.type] 

TypeError: объекты серии 'изменчивы, поэтому они не могут быть хэшированного

type_dict[df.type.values] 

TypeError: unhashable Тип: 'numpy.ndarray'

Обновленный вопрос:

для панд DataFrame , скажем, 'df', как я могу построить скорость над метрами с типом в качестве ключа маркерного словаря.

mkr_dict = {'gps': 'x', 'phone': '+', 'car': 'o'} 

x = {'speed': [10, 15, 20, 18, 19], 'meters' : [122, 150, 190, 230, 300], 'type': ['phone', 'phone', 'gps', 'gps', 'car']} 

df = pd.DataFrame(x) 
    meters speed type 
0  122  10 phone 
1  150  15 phone 
2  190  20 gps 
3  230  18 gps 
4  300  19 car 

plt.scatter(df.meters, df.Speed, marker = df.type.map(mkr_dict)) 

разброс сюжет не работает для меня ...

+0

AFAIK, простой python не имеет понятия «dataframes». Если вы используете фреймворк или библиотеку (например, [pandas] (http://pandas.pydata.org/)), укажите, какой из них. –

+0

Я думаю, что ваш вопрос о рассеянии должен быть новым вопросом, я не эксперт matplotlib, но я думаю, что вы можете достичь этого, используя ответ здесь: http://stackoverflow.com/questions/26490817/matplotlib-scatter-plot-with -разные-маркеры-и-цвета в основном это итерации по каждой строке, вызывающей разброс и передачу координаты x, y и маркера – EdChum

ответ

6

Пропустите Dict как арг к map:

In [79]: 

df['type'].map(type_dict) 
Out[79]: 
0   foo 
1   bar 
2  foobar 
3 foobarbar 
4   foo 
5   bar 
6  foobar 
7 foobarbar 
8   foo 
Name: type, dtype: object 

Это будет искать ключевое значение в dict и возвращать связанное значение из dict.

+0

Спасибо !!!!!! поэтому он создает список значений из словаря. Но я пытаюсь использовать это как маркеры в диаграмме рассеяния, но это не с ошибкой: TypeError: объекты 'Series' изменяемы, поэтому они не могут быть хэшированы plt.scatter (output.x, output.y, s = area,, marker = output.DataPointType.map (mkr_dict)). Есть идеи? –

+0

Вам нужно будет объяснить, как вы передаете эти значения, но списки и Series являются изменяемыми, как правило, хотя большинство из этих графических библиотек взаимодействуют с итерируемыми контейнерами, такими как массивы numpy, и должны быть совместимы с файловыми кадрами pandas. – EdChum

+0

Я обновил свой вопрос, может вы, пожалуйста, взгляните еще раз? Благодаря! –

3

В панд, это должно работать

df['val'] = df.apply(lambda x: type_dict[x['type']], axis=1) 
Смежные вопросы