2017-02-22 15 views
1

Я заметил, что выполнение isin в DataFrame, которое содержит типы данных datetime, где операнд представляет собой пустой DataFrame, генерирует значения даты и времени epoch (т. Е. 1970-01-01), вместо «Ложь». Кажется маловероятным, что это правильно?Pandas isin с пустым dataframe производит значение epoch для типа datetime вместо boolean

Следующий код демонстрирует это:

(панд = 0.19.2, NumPy = 1.12.0)

import pandas as pd 

data = {'date': ['2014-05-01 18:47:05.069722', '2014-05-01 18:47:05.119994', '2014-05-02 18:47:05.178768']} 
data2 = {'date': ['2014-05-01 18:47:05.069722', '2014-05-01 18:47:05.119994']} 
df = pd.DataFrame(data, columns = ['date']) 
df['date'] = pd.to_datetime(df['date']) 
df2 = pd.DataFrame(data2, columns = ['date']) 
df2['date'] = pd.to_datetime(df2['date']) 
df3 = pd.DataFrame([], columns = ['date']) 
df4 = pd.DataFrame() 

print df.isin(df2) 
print df.isin(df3) 
print df.isin(df4) 

Это выходы:

date 
0 True 
1 True 
2 False 
    date 
0 1970-01-01 
1 1970-01-01 
2 1970-01-01 
    date 
0 1970-01-01 
1 1970-01-01 
2 1970-01-01 

Я обычно планирующим список значений False вместо '1970-01-01'? Я заметил, что с пандами = 0.16.2 и NumPy = 1.9.2, df.isin(df3) производит более ожидаемым:

date 
0 False 
1 False 
2 False 

Но df.isin(df4) как предыдущий.

+0

Это звучит как ошибка для меня. Я бы сообщил об этом разработчикам панд на https://github.com/pandas-dev/pandas – languitar

ответ

0

Это определенно похоже на ошибку. isin() вызывает DataFrame.eq, как видно, in the source code, а нечетное поведение воспроизводится с помощью DataFrame.eq.

>>> df 
         date 
0 2014-05-01 18:47:05.069722 
1 2014-05-01 18:47:05.119994 
2 2014-05-02 18:47:05.178768 

>>> df.eq(pd.DataFrame(dict(date=[np.nan]*3))) 
     date 
0 1970-01-01 
1 1970-01-01 
2 1970-01-01 

Я вижу теперь вы подняли его, чтобы быть открытым вопрос,

и она должна быть решена для предстоящего выпуска.