Панды читают Excel, используя правильный тип данных, и конвертируют в CSV

#pandas #numpy #types #integer #number-formatting

#pandas #numpy #типы #целое число #форматирование чисел

Вопрос:

Я новичок в Python. У меня есть несколько входных файлов XLSX, и я хотел бы прочитать XLSX в фрейме данных Pandas, проверить, что поля, в которые я заинтересован, имеют правильный тип данных, а затем преобразовать фреймы данных в CSV.

На самом деле я использую следующий скрипт:

 # import needed modules
import pandas as pd
import numpy as np
import os

# Select the input folder 
GMR_folder = r'C:UsersMeDesktopMyFolder'

# Read all the files within the folder 
files = os.listdir(GMR_folder)

# Read xlsx files within the folder 
files_xls = [f for f in files if f[-4:] == 'xlsx']

for file in files_xls:
    last_path = file
    member = (file[:-5])
    file_path = GMR_folder   "\"   last_path
    # print(file_path)
    
    # Read the excel using specified datatype for the specified column 
    dataExcel = pd.read_excel(file_path, 
                         skiprows=range(0,3)

                        # define the datatype for each column we're intersted in 
                         dtype={'Col1':np.str,
                                'Col2':np.str,
                                'Col3':np.str,
                                'Col4':np.str,
                                'Col5':np.str,
                                'GPS Latitude (DD format) *': np.float32, 
                                'GPS Longitude (DD format) *': np.float32,
                                'GPS Latitude (Degrés décimaux) *':np.float32,
                                'GPS Longitude (Degrés décimaux) *':np.float32,
                                "Col10":np.int64,
                                "Col11":np.float64, 
                                "Col12":np.float64, 
                                "Col13":np.int64,
                                "Col14":np.float64,
                                "Col15":np.float64
                               })
                         
    
    # Insert the member ID in Col1
    dataExcel["Col1"] = member
    
    # Export the dataframe into a csv using the right encoding, useful to avoid strange char
    dataExcel.to_csv(member '.csv',
                     encoding="utf-8-sig")

    print(member   ' csv created')

print( 'all csv created')
 

На самом деле скрипт хорошо работает для некоторых XLSX, но для других у меня следующая ошибка:

 Unable to convert column Col13 to type <class 'numpy.int64'>
 

это также происходит с другими столбцами, которые необходимо преобразовать в float32.

Как я могу исправить эту ошибку? Было бы здорово иметь значения NA в строках, которые не могут быть преобразованы в правильный тип данных. Как я мог это сделать?

Комментарии:

1. Попробуйте pd.Int64 использовать целочисленные столбцы с нулевым значением.

Ответ №1:

Ознакомьтесь с документацией о новых типах Pandas и типах Numpy. https://pandas.pydata.org/pandas-docs/stable/user_guide/integer_na.html Вам нужно будет указать их как «Int64» (с большой буквы I для представления новых обнуляемых типов Pandas).