Pandas .min () опция skipna не работает для смешанной строки и серии NaN - PullRequest
0 голосов
/ 11 июня 2018

У меня есть серия Панд, которая в основном представляет собой смесь строк и np.nan.Моя цель - взять min() и max(), исключая все NaN.Каков будет лучший способ сделать это?

Например, использование встроенной в Pandas .min() не работает:

(Pdb) x
0         NaN
1    20180101
2    20170101
Name: DATE, dtype: object

(Pdb) x.min()
*** TypeError: unorderable types: float() <= str()

(Pdb) x.min(skipna=True)
*** TypeError: unorderable types: float() <= str()

Я бы хотел вернуть 20170101 в приведенном выше случае.Спасибо.

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Похоже, у вас есть даты.Тогда третьим вариантом будет использование факта, что у вас есть даты:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'col1': [np.nan, '20180101','20170101']
})

m = pd.to_datetime(df['col1']).min().date()
print(m)

Результаты:

2017-01-01
0 голосов
/ 11 июня 2018

Используйте dropna или логическое индексирование для удаления NaN, затем используйте min:

s.dropna().min()

или как @ALollz указывает в комментариях

s[s.notnull()].min()

Вывод:

'20170101'
...