Почему я не могу назначить тип данных «объект» для серии Pandas, которая содержит все записи типа «объект»? - PullRequest
0 голосов
/ 17 марта 2020

Я хочу заполнить некоторые недостающие данные в наборе данных Titani c наиболее распространенным значением, а именно 'S':

# This does not work:     
df.loc[df.Embarked.isnull(), 'Embarked'] = df.Embarked.mode()

# But this does work: 
df.loc[df.Embarked.isnull(), 'Embarked'] = 'S'

# And this works too:   
df.loc[df.Embarked.isnull(), 'Embarked'] = str(df.Embarked.mode())

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

df.Embarked.mode()
>>> 
0    S
dtype: object

Таким образом, режим возвращается как объект. Проверяя тип данных столбца Embarked, мы видим, что он также содержит все объекты:

df.Embarked
>>> 
PassengerId
1       S
2       C
3       S
4       S
5       S
       ..
1305    S
1306    C
1307    S
1308    S
1309    C
Name: Embarked, Length: 1309, dtype: object

Теперь, когда я понял, что работает, и это не так сложно реализовать, я просто Любопытно, почему очевидное (для меня) решение не сработало?

1 Ответ

1 голос
/ 18 марта 2020

некоторый фон:
object - это тип элемента в столбце (pandas вызывает str и object). если вы сделали type(df.Embarked.mode()), вы увидите, что это Series, если у вас более одного режима (т.е. нет дубликатов).

Что вы хотите:
df.loc[df.Embarked.isnull(), 'Embarked'] = df.Embarked.mode()[0]

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