Pandas превращает pd.Int64Dtype обратно в FloatPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Pandas превращает pd.Int64Dtype обратно в Float

Сообщение Anonymous »

У меня есть фрагмент кода, который разбивает некоторые данные на ряды, вносит некоторые изменения, в том числе потенциально преобразует несколько значений в NaN, а затем в конечном итоге объединяет эти ряды в кадр данных.
(см. упрощенный код ниже)
sers = []

for item in items:
type_name = item.name
values = {pd.to_datetime(value.date_string): value.doc_count for value in item.values}
series = pd.Series(values, name=type_name, dtype=pd.Int64Dtype())
reindexed_series = series.reindex(date_range, fill_value=0)
exclude_inapplicable_days(reindexed_series, type_name)
apply_offset(reindexed_series, type_name)
sers.append(reindexed_series)

df = pd.DataFrame(sers)

в ignore_inapplicable_days и apply_offset Я меняю некоторые значения в этой серии на NaN, что имеет для нас другое значение, чем 0, которое мы использовали в качестве fill_value.
Все хорошо, пока это не просто серия, у них тип данных int благодаря его указанию, но df превращает все это обратно в числа с плавающей запятой, несмотря на все серии в sers
code> имеющий типы int, совместимые с NaN.
Почему это происходит? Есть ли способ обойти это, не повторяя df и не меняя все обратно?
Воспроизводимый пример:
import pandas as pd

date_range = pd.date_range(start="2023-01-01", end="2023-01-05")

items = [
{"name": "Type1", "values": [{"date_string": "2023-01-01", "doc_count": 1},
{"date_string": "2023-01-02", "doc_count": 2},
{"date_string": "2023-01-03", "doc_count": 3},
{"date_string": "2023-01-04", "doc_count": 4},
{"date_string": "2023-01-05", "doc_count": 5}]},
{"name": "Type2", "values": [{"date_string": "2023-01-01", "doc_count": 6},
{"date_string": "2023-01-02", "doc_count": 7},
{"date_string": "2023-01-03", "doc_count": 8},
{"date_string": "2023-01-04", "doc_count": 9},
{"date_string": "2023-01-05", "doc_count": 10}]}
]

def exclude_inapplicable_days(series, type_name):
series[series.index[0]] = pd.NA
print(f"After exclusion in {type_name}: {series.dtype}")

def apply_offset(series, type_name):
offset = {
"Type1": 2,
"Type2": 1
}[type_name]
if offset > 0:
series.iloc[-offset:] = pd.NA
print(f"After offset in {type_name}: {series.dtype}")

sers = []
for item in items:
type_name = item['name']
values = {pd.to_datetime(val['date_string']): val['doc_count'] for val in item['values']}
series = pd.Series(values, name=type_name, dtype=pd.Int64Dtype())
reindexed_series = series.reindex(date_range, fill_value=0)
exclude_inapplicable_days(reindexed_series, type_name)
apply_offset(reindexed_series, type_name)
sers.append(reindexed_series)

df = pd.DataFrame(sers)

print("DataFrame dtypes:")
print(df.dtypes)


Подробнее здесь: https://stackoverflow.com/questions/787 ... k-to-float
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему мой float:left и float:none совершенно одинаковы и недостаточно далеко влево/не по центру [дубликат]
    Anonymous » » в форуме CSS
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Не может применить + оператор между серией [float] и float
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Pos arg 1 из тип не совпадает с параметром типа
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Django tinymce превращает все текстовые поля в редактор форматированного текста
    Anonymous » » в форуме Python
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • C++ превращает тип структуры во ввод строкового типа
    Anonymous » » в форуме C++
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»