Заменить значения в столбце панд на основе словаря / отображения индексов - PullRequest
0 голосов
/ 05 января 2019

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

dicts: {0: '1969',  1: '1971',  2: '76'}

У меня также есть следующий df:

    Start date      End Date
0       w              a
1       A              2
2       B             NaN

Теперь я хочу поместить словарь вместо одного столбца DataFrame

df = df.replace({'Start date': dicts})

Результат: ничего не изменилось: (

Ожидаемое:

    Start date      End Date
0       1969           a
1       1971           2
2       76            NaN

Ответы [ 3 ]

0 голосов
/ 05 января 2019

Вы также можете сделать что-то вроде этого:

import pandas as pd
#Creating Your DataFrame
d= {'Start Date': ['w','a','b'],'End Date': ['a',2,'Nan']}
df=pd.DataFrame(data=d)

#Assigning Your Dict Column
dicts = {0: '1969',  1: '1971',  2: '76'}
df['Start Date']= pd.DataFrame.from_dict(dicts, orient='index')
df

См. Документацию словаря к датафрейму здесь: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.from_dict.html

0 голосов
/ 06 января 2019

pd.DataFrame.replace заменяется значением, а не выравниванием индекса. Для последнего, один из вариантов: pd.Index.map индекс через словарь:

dicts = {0: '1969',  1: '1971',  2: '76'}
df['StartDate'] = df.index.map(dicts)

print(df)

  StartDate EndDate
0      1969       a
1      1971       2
2        76     NaN

Если есть потенциально не отображенные индексы, вы можете использовать fillna с серией:

df['StartDate'] = pd.Series(df.index.map(dicts)).fillna(df['StartDate'])
0 голосов
/ 05 января 2019

Я думаю, что более подходящим вариантом здесь будет преобразование вашего диктанта в серию и вызов update:

df['Start date'].update(pd.Series(dct))
df

  Start date End Date
0       1969        a
1       1971        2
2         76      NaN

replace не будет работать, потому что для этого требуется, чтобы словарь содержал {:}, но вместо этого вы указали индексы. Итак, в двух словах, чтобы replace работал, вам нужно было бы сделать

dct2 = {df.at[i, 'Start date']: v for i, v in dct.items()}
df.replace({'Start date': dct2})

  Start date End Date
0       1969        a
1       1971        2
2         76      NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...