Обновлено сообщение:Почему панда превращающий DateTimes плавать в агрегатной функции
Я хотел бы знать, почему панда трансформируется в datetime
столбце в float
один.
В приведенном ниже коде представлен вопрос, который у меня есть.
df = pd.DataFrame(pd.date_range("2012-01-01", periods=12).values.reshape(3,4), columns=list('abcd'))
print "Original:", {col: df[col].dtype for col in df.columns}
df['c'].loc[1] = pd.NaT
df['d'].loc[1] = pd.NaT
df['ab'] = df[['a','b']].min(1)
df['cd'] = df[['c','d']].min(1)
print "New:", {col: df[col].dtype for col in df.columns}
Это печатает:
Original: {'a': dtype('<M8[ns]'), 'c': dtype('<M8[ns]'), 'b': dtype('<M8[ns]'), 'd': dtype('<M8[ns]')}
New: {'a': dtype('<M8[ns]'), 'c': dtype('<M8[ns]'), 'b': dtype('<M8[ns]'), 'd': dtype('<M8[ns]'), 'cd': dtype('float64'), 'ab': dtype('<M8[ns]')}
Обратите внимание, что столбец ab
имеет тип dtype('<M8[ns]')
но cd
имеет тип dtype('float64')
.
Почему Панда меняет тип?
Оригинал сообщение:
Я бег очень простой код:
x['new1'] = x[['startDate1','stopDate1']].min(1)
x['new2'] = x[['startDate2','stopDate2']].min(1)
где х выглядит примерно так:
ID startDate1 stopDate1 startDate2 stopDate2
0 2000-01-01 2000-03-05 2005-01-01 2006-03-05
... ... ... ...
40053 1997-01-01 2011-03-05 2012-01-01 2012-03-05
Запуск x[colName].dtype
на все исходные столбцы возвращает dtype('<M8[ns]')
.
Однако x['new1'].dtype
не соответствует x['new2'].dtype
, где первый является dtype('<M8[ns]')
но последний dtype('float64')
.
Я исправил это с помощью этой строки, но я хочу знать, почему это происходит, поскольку для меня это мало смысла.
x['new2'] = pd.to_datetime(x[['startDate2','stopDate2']].min(1))
Есть много строк, поэтому я не могу пройти через все из них. Что это означает в отношении столбцов startDate2
и stopDate2
?
Обновление Оригинальное сообщение: Единственное различие, которое я нашел между столбцами в том, что stopDate2
имеет, по меньшей мере, один ряд с NaT
. Удаление NaT
s устраняет проблему, но я не могу воспроизвести ее с помощью фиктивных данных.
могли бы вы добавить код, который создает массив x, чтобы воспроизвести проблему? –
Я попытался упростить его (фактический код очень длинный) - это импорт CSV, который обрабатывается много раз. – TimY
Какую версию панд вы используете? Я не могу воспроизвести это с 0.16-0.18 – joris