Я пытаюсь прочитать некоторые данные Excel через Polars.read_excel(), и данные не идентичны подходу Pandas.read_excel() для столбцов со смешанными данными.
Вот пример для иллюстрации:
# create sample data, save to excel.
test = pd.DataFrame(
{
'nums': [1, 2, 3],
'mixed': [1, 4, '6A'],
'factor': ['A', 'B', 'C']
}
)
test.to_excel('test.xlsx', index = False)
# read data using Pandas and Polars. Convert polars version to pandas.
test_pd = pd.read_excel('test.xlsx', engine='openpyxl')
test_pl = pl.read_excel('test.xlsx')
test_pl = test_pl.to_pandas()
# compare the two
print(test_pd)
print(test_pl)
print(test_pd == test_pl)
print(test_pd) и print(test_pl), предполагают, что данные идентичны. Однако print(test_pd == test_pl) возвращает следующее:
nums mixed factor
0 True False True
1 True False True
2 True True True
Что-то заставляет данные не быть идентичными? И является ли это ограничением Polars (или Arrow) при работе с объектными переменными? Я хочу, чтобы подход pl.read_excel()/преобразования в pandas в конечном итоге давал идентичный DataFrame для pd.read_excel().
Спасибо!
@roganjosh Это не так. Они используют .to_pandas()
для преобразования фрейма данных polars в pandas: test_pl = test_pl.to_pandas()
каким-то образом полярники превратили некоторые из ваших чисел в строки. Смотри сюда:
test_pl.iloc[0,1]
'1'
в то время как панды сделали целые числа, где это возможно. Та же ячейка в пандах:
test_pd.iloc[0,1]
1
Если вы применяете приведение типов к обеим таблицам, все ячейки равны:
test_pd.astype('string') == test_pl.astype('string')
nums mixed factor
0 True True True
1 True True True
2 True True True
Поляры и стрелки полагаются на строгие типы данных, поэтому, в конечном счете, да, это ограничение. У вас никогда не может быть столбца, который иногда является Utf8, а иногда Floatxx.
Pandas, с другой стороны, счастлив иметь столбец смешанных типов данных, потому что это просто список Python.
Проверьте типы,
type(test_pd.iloc[0, 1])
иtype(test_pl.iloc[0, 1])
- столбцы полярных чисел имеют «один тип», поэтому в этом случаеstr
был «супертипом»1, 4, 6A
.