Ho un .csv con la seguente struttura:Importazione di dati finanziari Into Python Pandas utilizzando read_csv
date_begin,date_end,name,name_code,active_accounts,transaction_amount,transaction_count
1/1/2008,1/31/2008,Name_1,1001,"123,456","$7,890,123.45","67,890"
2/1/2008,2/29/2008,Name_1,1001,"43,210","$987,654.32","109,876"
3/1/2008,3/31/2008,Name_1,1001,"485,079","$1,265,789,433.98","777,888"
...
12/1/2008,12/31/2008,Name_1,1001,"87,543","$432,098,987","87,987"
1/1/2008,1/31/2008,Name_2,1002,"268,456","$890,123.45","97,890"
2/1/2008,2/29/2008,Name_2,1002,"53,210","$987,654.32","109,876"
...
etc
Sto cercando di leggerli in in un dataframe panda utilizzando il seguente codice:
import pandas as pd
data = pd.read_csv('my_awesome_csv.csv'),parse_dates=[[0,1]],
infer_datetime_format=True)
Questo funziona bene, tranne che mi piacerebbe controllare i tipi di dati in ogni colonna. Quando eseguo il seguente codice nell'interprete scopro che i numeri tra virgolette non vengono riconosciuti come numeri, né dollari né altro.
In [10]: data.dtypes
Out[10]:
date_begin_date_end object
name object
name_code int64
active_accounts object # Problem, I want this to be a number
transaction_amount object # Ditto, I want this to be a number (it's a dollar amount)
transaction_count object # Still a number!
dtype: object
Ho fatto qualche curiosare in giro nel Pandas csv documentation ma non ho trovato quello che sto cercando per circa dichiarare tipi che sono valori quando vengono salvati come stringhe con virgole e segni di dollaro nel csv. Il mio obiettivo finale qui è di essere in grado di fare alcune operazioni aritmetiche sui valori in queste colonne.
Qualche idea?
Grazie per questo, sembra come una soluzione elegante e veloce. Lavoro con SAS da un po 'e sono abituato a dichiarare i formati per i dati quando importo ogni colonna, ad esempio "dollar20.2". In questo modo conservo il fatto che le unità sono dollari. Speravo che i panda potessero avere qualcosa di simile a questo, oltre a float64, int64, ecc. – invoker
I panda non hanno un tipo di valuta (almeno non ancora). In Python, un modo comune per rappresentare le valute è usare il modulo 'decimal' o un [modulo di terze parti come python-money] (http://stackoverflow.com/q/1406737/190597). Lo svantaggio di utilizzare questi dati in un DataFrame panda è che i calcoli numerici non utilizzeranno più i dtypes nativi di NumPy e quindi saranno molto più lenti. Quindi se la precisione è la tua priorità principale, converti i valori in 'decimal.Decimals' (o istanze della classe Python-money equivalente). Ma se la tua priorità è la velocità, usa i float. – unutbu
Ho modificato il codice 'convertitori' qui sopra per mostrare come convertire la colonna' transaction_amount' in 'decimal.Decimal's. – unutbu