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

У меня есть столбец категории, который я хочу заполнить серией.Я пробовал это:

df = pd.DataFrame({'key': ['a', 'b'], 'value': ['c', np.nan]})
df['value'] = df['value'].astype("category")
df['value'] = df['value'].cat.add_categories(df['key'].unique())
print(df['value'].cat.categories)
df['value'] = df['value'].fillna(df['key'])
print(df)

Ожидаемый вывод:

Index(['c', 'a', 'b'], dtype='object')
  key value
0   a     c
1   b     b

Фактический вывод:

Index(['c', 'a', 'b'], dtype='object')
  key value
0   a     a
1   b     b

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Начиная с doc , категориальные данные будут принимать скаляр, а не ряды, поэтому вам может потребоваться преобразовать их обратно в серию

df.value.astype('object').fillna(df.key) # then convert to category again
Out[248]: 
0    c
1    b
Name: value, dtype: object

значение: скаляр Значение, используемое длязаполнить отверстия (например, 0)

0 голосов
/ 18 февраля 2019

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

df['value'] = pd.Categorical(
    df.value.astype(object).fillna(df.key), categories=df.stack().unique())
df

  key value
0   a     c
1   b     b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...