Pandas Dataframe Паркет Типы данных? - PullRequest
0 голосов
/ 10 сентября 2018

Я пытаюсь использовать Pandas и Pyarrow для паркетных данных. У меня есть сотни файлов паркета, которые не должны иметь одинаковую схему, но если столбцы совпадают между паркетами, они должны иметь одинаковый тип данных.

Я попадаю в ситуации, когда результирующие типы данных паркета не соответствуют моим ожиданиям. Например, я могу записать int64 в столбец, и полученный паркет будет в формате double. Это вызывает много проблем на стороне обработки, где 99% данных вводятся правильно, но в 1% случаев это просто неправильный тип.

Я пытался импортировать numpy и упаковывать значения таким образом-

import numpy as np

pandas.DataFrame({
  'a': [ np.int64(5100), np.int64(5200), np.int64(5300) ]
})

Но я все еще получаю случайный дубль, так что, должно быть, это неправильный способ сделать это. Как я могу обеспечить согласованность типов данных по столбцам в файлах паркета?

Обновление-

Я обнаружил, что это происходит только тогда, когда столбец содержит один или несколько None с.

data_frame = pandas.DataFrame({
  'a': [ None, np.int64(5200), np.int64(5200) ]
})

Может ли паркет не обрабатывать смешанные столбики None-int64?

1 Ответ

0 голосов
/ 12 сентября 2018

Сама Pandas не может обрабатывать значения null / na в целочисленных столбцах в данный момент (версия 0.23.x).В следующем выпуске будет целочисленный тип, допускающий значение NULL.Тем временем, когда у вас есть нулевое значение в целочисленном столбце, Pandas автоматически преобразует его в столбец с плавающей точкой.Таким образом, у вас также есть столбец с плавающей точкой в ​​полученном файле Parquet:

import numpy as np
import pandas as pd

df = pd.DataFrame({
  'a': [np.int64(5100), np.int64(5200), np.int64(5300)]
})
# df['a'].dtype == dtype('int64')
df = pd.DataFrame({
  'a': [None, np.int64(5200), np.int64(5200)]
})
# df['a'].dtype == dtype('float64')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...