pandas.Dataframe () смешанные типы данных и странное поведение .fillna () - PullRequest
0 голосов
/ 24 ноября 2018

У меня есть фрейм данных, который имеет два типа: Object (ожидаемая строка) и Datetime (ожидаемое datetime).Я не понимаю это поведение и почему оно влияет на мою fillna ().

enter image description here

Вызов .fillna () с inplace = True стирает данные, обозначенныекак int64, несмотря на изменение с помощью .astype (str)

enter image description here

Вызов .fillna () без него ничего не делает.

enter image description here

Я знаю, что pandas / numpy dtypes отличаются от нативного Python, но это правильное поведение или я получаю что-то ужасно неправильное?

пример:

import random
import numpy
sample = pd.DataFrame({'A': [random.choice(['aabb',np.nan,'bbcc','ccdd']) for x in range(15)],
                       'B': [random.choice(['2019-11-30','2020-06-30','2018-12-31','2019-03-31']) for x in range(15)]})
sample.loc[:, 'B'] = pd.to_datetime(sample['B'])

enter image description here

for col in sample.select_dtypes(include='object').columns.tolist():
    sample.loc[:, col].astype(str).apply(lambda x: str(x).strip().lower()).fillna('NULL')

for col in sample.columns:
    print(sample[col].value_counts().head(15))
    print('\n')

Здесь ни NULL, ни Nan не отображаются.Добавлен .replace ('nan', 'NULL'), но все равно ничего.Можете ли вы дать мне понять, что искать, пожалуйста?Большое спасибо.

enter image description here

1 Ответ

0 голосов
/ 24 ноября 2018

Проблема здесь заключается в преобразовании пропущенных значений в string с, поэтому fillna не может работать.Решением является использование функции панд Series.str.strip и Series.str.lower, работа с отсутствующими значениями очень хороша:

for col in sample.select_dtypes(include='object').columns:
    sample[col] = sample[col].str.strip().str.lower().fillna('NULL')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...