Заполните NaNs в колонках панд, используя словарь - PullRequest
4 голосов
/ 02 июля 2019

Есть ли способ сопоставить значения столбцов, используя словарь, который не включает все столбцы.Например:

Допустим, мой фрейм данных:

 A    B    C    D    E    F
nan  nan  nan  nan  nan  nan

, и у меня есть словарь, который я хотел бы использовать в качестве средства отображения:

d = {'A': 1, 'B': 1, 'E': 1}

, поэтому выводследует заменить на 0 те значения, которых нет в словаре

A    B    C    D    E    F
1    1    0    0    1    0

1 Ответ

3 голосов
/ 02 июля 2019

Самый идиоматичный выбор - два fillna звонка,

df.fillna(d).fillna(0, downcast='infer')
df

   A  B  C  D  E  F
0  1  1  0  0  1  0

piRSquared предлагает assign в качестве альтернативы первому fillna вызову,

df.assign(**d).fillna(0, downcast='infer')
df

   A  B  C  D  E  F
0  1  1  0  0  1  0

Другой вариант - использовать Index.isin для столбцов. Это однорядная форма:

df[:] = [df.columns.isin(d.keys()).astype(int)]

Чтобы обобщить до N строк, мы используем repeat:

df[:] = df.columns.isin(d.keys()).astype(int)[None,:].repeat(len(df), axis=0)
df

   A  B  C  D  E  F
0  1  1  0  0  1  0

Для развлечения вы также можете использовать reindex:

pd.DataFrame(d, index=df.index).reindex(df.columns, axis=1, fill_value=0)

   A  B  C  D  E  F
0  1  1  0  0  1  0
...