2016-04-06 12 views
5

Ho un file UTF-8 con i dati di Twitter e sto cercando di leggere in un frame di dati Python, ma posso solo ottenere un tipo di 'oggetto' invece di stringhe Unicode:Come leggere i file UTF-8 con Pandas?

# file 1459966468_324.csv 
#1459966468_324.csv: UTF-8 Unicode English text 
df = pd.read_csv('1459966468_324.csv', dtype={'text': unicode}) 
df.dtypes 
text    object 
Airline   object 
name    object 
retweet_count  float64 
sentiment   object 
tweet_location  object 
dtype: object 

Qual è il diritto modo di leggere e forzare i dati UTF-8 in unicode con Pandas?

Questo non risolve il problema:

df = pd.read_csv('1459966468_324.csv', encoding = 'utf8') 
df.apply(lambda x: pd.lib.infer_dtype(x.values)) 

file di testo è qui: https://raw.githubusercontent.com/l1x/nlp/master/1459966468_324.csv

+0

http://stackoverflow.com/a/20670901/2141635 –

+0

Uso di 'df.apply (lambda x: pd.lib.infer_dtype (x. valori)) 'mostra i tipi come unicode e misti, se si guarda il link sopra vedrete cosa sta succedendo –

risposta

7

Come l'altro poster menzionato , potresti provare:

df = pd.read_csv('1459966468_324.csv', encoding = 'utf8') 

Tuttavia questo potrebbe ancora lasciarti a guardare 'oggetto' quando si stampa il dtypes. Per confermare che sono utf8, provare questa linea dopo aver letto il CSV: uscita

df.apply(lambda x: pd.lib.infer_dtype(x.values)) 

Esempio:

args   unicode 
date   datetime64 
host   unicode 
kwargs   unicode 
operation  unicode 
+0

Non lo risolve :( – Istvan

+1

continua a visualizzarli tutti come oggetti? – Sam

+1

È perché si hanno valori 'nan'. Prova' df.dropna (sottoinsieme = ["testo"], inplace = True) 'prima quindi il suggerimento di Sam sarà converti la colonna di testo in unicode nel file che hai fornito. – ayhan

3

Utilizzare la parola chiave encoding con il parametro appropriato:

df = pd.read_csv('1459966468_324.csv', encoding='utf8') 
+0

Vedere l'aggiornamento sopra. – Istvan

0

Pandas memorizza le stringhe in object s. In python 3, tutte le stringhe sono in unicode per impostazione predefinita. Quindi se usi python 3, i tuoi dati sono già in unicode (non essere fuorviato dal tipo object).

Se si dispone di python 2, utilizzare df = pd.read_csv('your_file', encoding = 'utf8'). Quindi prova ad esempio pd.lib.infer_dtype(df.iloc[0,0]) (suppongo che la prima colonna sia costituita da stringhe.)