2016-01-28 3 views
0

Le fichier csv que j'alimente dans read_csv est un couple de colonnes avec des changements de pourcentage mais il contient des caractères cachés. De repr(data2):Python: read_csv dans dataframe - impossible de convertir l'objet en float

enter image description here

J'ai essayé les éléments suivants:

data2 = pd.read_csv('C:/Users/nnayyar/Documents/MonteCarlo2.csv', "\n", delimiter = ",", dtype = float) 

et a obtenu l'erreur suivante:

ValueError: invalid literal for float(): 7.05% 

J'ai essayé quelques petites choses:

float(data2.replace('/n','')) 
map(float, data2.strip().split('\r\n')) 

Mais reçu diverses erreurs respectivement TypeError: float() argument doit être une chaîne ou un nombre AttributeError: objet « dataframe » n'a pas d'attribut « bande »

Toute aide pour obtenir le type d'objet CSV dans le type float serait soit utile! Merci!!

+1

Vous devrez soit passer un co fonction nverter ou convert en supprimant le signe '%' comme travail de post-traitement – EdChum

+0

si j'essaie d'utiliser .strip() j'obtiens l'erreur suivante: AttributeError: l'objet 'DataFrame' n'a pas d'attribut 'strip'; Également essayé data2.map (lambda x: x.lstrip ('%')) et a obtenu une erreur similaire. – user5854307

Répondre

1

Si l'ensemble de votre csv a des signes de pourcentage alors ce qui suit fonctionnera:

In [203]: 
import pandas as pd 
import io 
t="""0 1 2 3 
1.5% 2.5% 6.5% 0.5%""" 
# load some dummy data 
df = pd.read_csv(io.StringIO(t), delim_whitespace=True) 
df 

Out[203]: 
     0  1  2  3 
0 1.5% 2.5% 6.5% 0.5% 

In [205]: 
# apply a lambda that replaces the % signs and cast to float  
df.apply(lambda x: x.str.replace('%','')).astype(float) 

Out[205]: 
    0 1 2 3 
0 1.5 2.5 6.5 0.5 

Donc, ce applys un lambda à chaque colonne qui appelle la vectorisée str.replace pour enlever le signe %, on peut alors convertir le type de flotter en utilisant astype

donc, dans votre cas ce qui suit devrait fonctionner:

data2 = pd.read_csv('C:/Users/nnayyar/Documents/MonteCarlo2.csv', "\n") 
data2 = data2.apply(lambda x: x.str.replace('%', '').astype(float))