2016-01-26 4 views
1

A DataFrame df имеет столбец с именем LastPrice. Каждый из df['LastPrice'] является string, я хочу преобразовать string в float. Я использую map, чтобы решить эту проблему.Есть ли способ эффективно преобразовать тип данных в столбец DataFrame?

#-*- encoding:utf-8 -*- 
import pandas as pd 
from pandas import Series,DataFrame 

df = DataFrame({'Time':['1-14','1-15','1-16'],'LastPrice':['1.0','2.0','3.0']},columns = ['Time','LastPrice']) 
f_L = df['LastPrice'].map(float) 
print type(f_L[0]) 
print type(df['LastPrice'][0]) 

Результат:

<type 'numpy.float64'> 
<type 'str'> 
[Finished in 1.2s] 

Так map не может преобразовать типы данных в-placce, я просто делаю:

df['LastPrice'] = f_L 

Есть ли способ для преобразования типа данных в столбце DataFrame эффективно? То, что я имею в виду, - это скрытие типа данных вместо места переназначения.

ответ

1

Вы можете использовать pd.to_numeric для pandas версии> = 0.17.0:

pd.to_numeric(df['LastPrice']) 

In [110]: pd.to_numeric(df['LastPrice']) 
Out[110]: 
0 1 
1 2 
2 3 
Name: LastPrice, dtype: float64 

В версиях < = 0.17.0 можно использовать convert_objects:

In [112]: df['LastPrice'].convert_objects(convert_numeric=True) 
Out[112]: 
0 1 
1 2 
2 3 
Name: LastPrice, dtype: float64 
1

Вы можете попробовать astype:

df['LastPrice'] = df['LastPrice'].astype(float) 


df = DataFrame({'Time':['1-14','1-15','1-16'],'LastPrice':['1.0','2.0','3.0']}, 
                   columns = ['Time','LastPrice']) 

df['LastPrice'] = df['LastPrice'].astype(float) 
print df 
    Time LastPrice 
0 1-14   1 
1 1-15   2 
2 1-16   3 

print type(df['LastPrice'][0]) 
<type 'numpy.float64'> 
0

Я иногда использовать пользовательские функции

def str_to_flt(s): 
    try: 
     return float(s) 
    except ValueError: 
     return None 

Затем я использую пользовательскую функцию

df['FloatField']=df['StrField'].apply(str_to_flt) 

можно затем определить «плохие» значения, как они установлены в NaN.

Надеюсь, это поможет.

Смежные вопросы