2016-05-28 5 views
0

Я использую ниже линии, чтобы прочитать файл CSV, где столбец B заканчивается в формате ул и я не удается преобразовать его плавать непосредственно:как преобразовать ул плавать в панд dataframe

df = pd.read_csv('data.csv', sep=";", encoding = "ISO-8859-1") 

это производит dataframe, где все столбцы в формате ул:

  A  B 
    0 Emma  -20,50 
    1 Filo  -15,75 
    2 Theo  17,23 

Как вы можете заметить, что десятичные отделены друг от друга «» вместо «» потому что это немецкий csv. Я попробовал следующее уже (но безрезультатно):

..., dtype={'B': np.float32}, decimal= ',' , .... 

Любая идея, как я мог бы сделать это в процессе чтения?

внесении изменений и дополнений после прочтения CSV работает (но это неэффективный дополнительный шаг, который я хотел бы избежать), это то, что я использую:

df['B'] = df['B'].str.replace(',', '.').astype(float) 

ответ

0

Для меня это работает хорошо, я только опустить dtype={'B': np.float32}:

import pandas as pd 
import io 

temp=u"""A;B 
0;Emma;-20,50 
1;Filo;-15,75 
2;Theo;17,23""" 
#after testing replace io.StringIO(temp) to filename 
df = pd.read_csv(io.StringIO(temp), sep=";", encoding = "ISO-8859-1", decimal= ',') 
print (df) 
     A  B 
0 Emma -20.50 
1 Filo -15.75 
2 Theo 17.23 

print (df.dtypes) 
A  object 
B float64 
dtype: object 

EDIT:

Я думаю, что проблема может быть некоторые десятичные являются . и некоторые ,, а затем использовать converters:

import pandas as pd 
import io 

temp=u"""A;B 
0;Emma;-20,50 
1;Filo;-15.75 
2;Theo;17,23""" 


def converter(x): 
    return float(x.replace(',','.')) 

#define each column 
converters={'B': converter} 

#after testing replace io.StringIO(temp) to filename 
df = pd.read_csv(io.StringIO(temp), 
       sep=";", 
       encoding = "ISO-8859-1", 
       converters=converters) 
print (df) 

0 Emma -20.50 
1 Filo -15.75 
2 Theo 17.23 

print (df.dtypes) 
A  object 
B float64 
dtype: object 
+0

спасибо за быстрый ответ, но для меня это все еще не работает. Я нахожу это очень странным. –

+0

Редактировать тоже не работает? – jezrael

+0

нет, это не проблема. все десятичные числа действительно являются «,». Но есть некоторые 0 значений (так что нет десятичной) и некоторые NaN. –