Непроизвольное преобразование int64 в float64 в пандах - PullRequest
0 голосов
/ 12 мая 2018

Не бери в голову ниже - я вижу причину проблемы.Сдвиг, конечно, производит N / A.

Я хочу предотвратить преобразование типов, которое происходит при объединении кадра данных с самим собой по горизонтали.У меня есть dataframe, где все столбцы int64 (и индекс является datetime64 [нс]):

df.dtypes
Out[118]: 
op        int64

Я конкатенирую, чтобы столбцы следующей строки (с суффиксом "_next") отображались в одной строкекак текущая строка:

df = pd.concat([df, df.shift(-1).add_suffix('_next')], axis=1)

Но тогда типы в сцепленных столбцах изменяются на float64:

df.dtypes
Out[122]: 
op               int64
op_next        float64

Есть ли способ предотвратить такое преобразование типов?Спасибо.

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

Это происходит потому, что df.shift(-1) имеет один элемент, который является NaN, который является float.Такая серия будет автоматически повышена до float.Вот минимальный пример:

df = pd.DataFrame({'op': [1, 2, 3]})
df = pd.concat([df, df.shift(-1).add_suffix('_next')], axis=1)

print(df)

   op  op_next
0   1      2.0
1   2      3.0
2   3      NaN

Вы ничего не можете сделать, кроме использования fillna для заполнения целым числом и преобразования.Вы можете сделать это до или после pd.concat:

До

df = pd.concat([df, df.shift(-1).fillna(0).astype(int).add_suffix('_next')], axis=1)

После

df = pd.concat([df, df.shift(-1).add_suffix('_next')], axis=1)
df = df.fillna(0).astype(int)
0 голосов
/ 12 мая 2018

Shift создает значение / a, заставляя float64.

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