#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).