Panda Python: come specificare i tipi di dati durante la lettura di un file Excel?


Answers

A partire da v0.20.0 , l'argomento parola chiave dtype nella funzione read_excel() potrebbe essere utilizzato per specificare i tipi di dati che devono essere applicati alle colonne proprio come esiste per il caso read_csv() .

L'uso di converters e di argomenti dtype insieme sullo stesso nome di colonna porterebbe a quest'ultimo ad apparire in ombra e il primo a ottenere vantaggi.

1) Inorder per non interpretare i dtypes ma piuttosto passare tutti i contenuti delle sue colonne come erano originariamente nel file, potremmo impostare questo argomento su str o object modo da non rovinare i nostri dati. (uno di questi casi potrebbe portare zeri in numeri che altrimenti andrebbero persi)

pd.read_excel('file_name.xlsx', dtype=str)            # (or) dtype=object

2) Supporta anche una mappatura dict in cui le keys costituiscono i nomi e i values delle colonne, il cui rispettivo tipo di dati deve essere impostato specialmente quando si desidera modificare il dtype per un sottoinsieme di tutte le colonne.

# Assuming data types for `a` and `b` columns to be altered
pd.read_excel('file_name.xlsx', dtype={'a': np.float64, 'b': np.int32})
Question

Sto importando un file excel in un dataframe panda con la funzione pandas.read_excel() .

Una delle colonne è la chiave primaria della tabella: è composta da tutti i numeri, ma è archiviata come testo (il piccolo triangolo verde nella parte in alto a sinistra delle celle di Excel lo conferma).

Tuttavia, quando impongo il file in un dataframe panda, la colonna viene importata come float. Ciò significa che, ad esempio, "0614" diventa 614.

C'è un modo per specificare il tipo di dati durante l'importazione di una colonna? Capisco che questo sia possibile quando si importano file CSV ma non si riesce a trovare nulla nella sintassi di read_excel() .

L'unica soluzione a cui riesco a pensare è di aggiungere una lettera arbitraria all'inizio del testo (convertendo '0614' in 'A0614') in Excel, per assicurarsi che la colonna sia importata come testo e quindi tagliare la 'A' in python, quindi posso abbinarlo ad altre tabelle che sto importando da SQL.




Nel caso in cui se non si è a conoscenza del numero e del nome delle colonne in dataframe, questo metodo può essere utile:

column_list = []
df_column = pd.read_excel(file_name, 'Sheet1').columns
for i in df_column:
    column_list.append(i)
converter = {col: str for col in column_list} 
df_actual = pd.read_excel(file_name, converters=converter)

dove column_list è l'elenco dei nomi delle colonne.




Related