pandas dataframe: сохранить и прочитать листы excel | обработка целых чисел в виде строк

У меня есть панда данных (df).

df имеет много столбцов и строк, многие из которых являются целыми числами.

Мое намерение состоит в том, чтобы сохранить данные в качестве файла excel и прочитать его снова, сохраняя целостность данных.

Я использую следующие шаги.

Сохранить в excel:

writer = pd.ExcelWriter("myExcelFile.xlsx") df.to_excel(writer, 'sheet_name') writer.save() 

Чтобы прочитать от excel:

 import glob files = glob.glob("myExcelFile*.xlsx") #gives list of files myFile = files[0] df = pd.read_excel(myFile , sheetname='sheet_name', convert_float=True) 

Обратите внимание на вариант « convert_float ». Предположительно, excel сохраняет все числа в формате float. Поэтому этот параметр должен помочь преобразовать все значения float в возможные целые числа.

Например, 1.0 -> 1.

Мое требование – извлечь исходные целочисленные значения, которые я собирался сохранить на этом листе excel, и получить позже. Однако по какой-то причине это не работает. Я где-то ошибаюсь?

Есть ли способ, которым я могу справиться с этим во время сохранения, чтобы преуспеть?

Я попытался решить эту проблему, перебирая целые числа в строки, сохраняя строки в excel, считывая строки из excel, переходя к целым числам. Но боль слишком тяжелая как для меня, так и для моего приложения: – /

Я не могу воспроизвести вашу проблему. Кажется, это работает отлично для меня:

 import pandas as pd df = pd.DataFrame({'Floats': [10.1, 20.2, 30.3, 20.0, 15.9, 30.1, 45.0], 'Integers': [10.0, 20.0, 30, 20, 15, 30, 45]}) filename = 'df.xlsx' writer = pd.ExcelWriter(filename) df.to_excel(writer) writer.save() df = pd.read_excel(filename, convert_float=True) print df 

Результат:

  Floats Integers 0 10.1 10 1 20.2 20 2 30.3 30 3 20.0 20 4 15.9 15 5 30.1 30 6 45.0 45 

Получаете ли вы тот же результат при запуске этого кода? Если это так, то должно быть что-то еще. Можете ли вы дать нам код, который демонстрирует проблему?

Обратите внимание, что каждый столбец, в котором есть по крайней мере один поплавок, сделает весь столбец обработанным как float, потому что вы не можете обычно иметь несколько типов данных в данном столбце (см. Ниже относительно типа столбца object ).

Один обходной путь, если приведенный выше код не работает по какой-либо причине, заключается в том, чтобы заставить определенные столбцы и / или индекс быть целыми числами вручную, например:

 df = pd.read_excel(filename) # convert_float=False by default df['Integers'] = df['Integers'].astype(int) df.index = df.index.astype(int) print df 

И вы можете заставить все столбцы быть целыми числами:

 df = pd.read_excel(filename).astype(int) 

Редактировать после того, как ОП дал более подробную информацию:

Если вы знаете, какие столбцы нужно рассматривать как строки, вы можете использовать ту же самую ручную технику сверху:

 df['Strings'] = df['Strings'].astype(str) 

Но вы хотите, чтобы он был более автоматическим. Это хаки, но это работает. Если вы добавите фиктивную строку в конец ваших данных, которая нагло будет содержать строку, например 'dummy' , то pandas приведёт столбец в виде объектов, причем каждый элемент имеет свой собственный тип данных. Без фиктивной строки это не сработает. Вы можете попробовать прокомментировать данные в моем коде, чтобы увидеть.

 import pandas as pd # This works. df = pd.DataFrame({'Floats': [10.1, 20.2, 30.3, 20.0, 15.9, 30.1, 0], 'Objects': ['10.0', 20.0, 30.5, 20, 15, 30, 'dummy']}) # This doesn't work. # df = pd.DataFrame({'Floats': [10.1, 20.2, 30.3, 20.0, 15.9, 30.1], # 'Objects': ['10.0', 20.0, 30.5, 20, 15, 30]}) filename = 'df.xlsx' writer = pd.ExcelWriter(filename) df.to_excel(writer) writer.save() # Remove the dummy row. df = pd.read_excel(filename)[:-1] print df print print df.dtypes print print df.loc[0, 'Objects'], type(df.loc[0, 'Objects']) print df.loc[1, 'Objects'], type(df.loc[1, 'Objects']) print df.loc[2, 'Objects'], type(df.loc[2, 'Objects']) print df.loc[3, 'Objects'], type(df.loc[3, 'Objects']) 

Результат:

  Floats Objects 0 10.1 10.0 1 20.2 20 2 30.3 30.5 3 20.0 20 4 15.9 15 5 30.1 30 Floats float64 Objects object dtype: object 10.0 <type 'unicode'> 20 <type 'int'> 30.5 <type 'float'> 20 <type 'int'> 
  • Использовать имена таблиц как переменные в Pandas
  • Pandas MemoryError с concat на относительно небольших файлах excel
  • Запись в Excel CSV с циклом for с использованием Pandas
  • Как я могу увидеть формулы таблицы Excel в pandas / python?
  • Как правильно разобрать текстовые числа, разделенные смешанными запятыми и точками в файле excel, используя Python?
  • Pandas: создание кадра данных из каждой электронной таблицы в большом файле excel
  • Экспортируйте многие небольшие DataFrames на один рабочий лист Excel
  • Как добавить пустой лист в файл `excel`, который уже создан с помощью pandas
  • python - экспорт мультииндексной базы данных pandas в excel
  • pandon pandas Доступ к Excel MemoryError
  • Как вставить фреймворк в Excel с помощью xlwings без pywintypes.com_error?
  • Interesting Posts

    0x800a03ec при вызове Select в диапазоне Excel (IRange). Дальность была возвращена с использованного диапазона листа

    С помощью функции NumXL

    Excel VBA Скрыть все открытые пользовательские формы

    Есть ли простой способ конвертировать .xls-файл в CSV-файл? (Excel)

    Excel Удалить строку, если в именованном диапазоне

    Удалить активный столбец из диапазона в формуле с помощью Excel

    Parse Cell Location String в строку и колонку

    Многоуровневая сумма (связанные дочерние уровни с родительским уровнем) без макроса

    Я хочу, чтобы формула excel получала количество общих номеров строк, которое имеет многострочный текст в диапазоне?

    Python – чистый способ обертывания отдельных операторов в попытке, кроме блока

    Использование WScript.CreateObject в excel

    Автоматическое заполнение столбца по ссылке?

    Последняя строка таблицы AddIn

    Создайте динамический диапазон, основанный на характеристике ячеек vba

    Включить вложение, где имя совпадает с именем получателя

    Давайте будем гением компьютера.