Поляры read_excel не равны Pandas read_excel для столбцов со «смешанными» типами

Я пытаюсь прочитать некоторые данные 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().

Спасибо!

Проверьте типы, type(test_pd.iloc[0, 1]) и type(test_pl.iloc[0, 1]) - столбцы полярных чисел имеют «один тип», поэтому в этом случае str был «супертипом» 1, 4, 6A.

jqurious 10.04.2023 19:20

@roganjosh Это не так. Они используют .to_pandas() для преобразования фрейма данных polars в pandas: test_pl = test_pl.to_pandas()

jqurious 10.04.2023 19:22
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
118
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

каким-то образом полярники превратили некоторые из ваших чисел в строки. Смотри сюда:

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.

Другие вопросы по теме