有没有办法在DataFrame的列中有效地转换数据类型?

时间:2016-01-26 08:21:49

标签: python pandas dataframe

DataFrame df有一个名为LastPrice的列。 df['LastPrice']中的每一个都是string,我想将string转换为float。我使用map来解决它。

#-*- 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无法转换数据类型in-placce,我只是这样做:

df['LastPrice'] = f_L

有没有办法有效地隐藏DataFrame列中的数据类型? 我的意思是就地转换数据类型,而不是重新分配。

3 个答案:

答案 0 :(得分:1)

您可以将pd.to_numeric用于["GIS-R-0001","1","1","1","6032","0","1","3223","10000000.00","1","2016-01-10 09:45:36","1602"] 版本&gt; = pandas

0.17.0

在版本&lt; = pd.to_numeric(df['LastPrice']) In [110]: pd.to_numeric(df['LastPrice']) Out[110]: 0 1 1 2 2 3 Name: LastPrice, dtype: float64 中,您可以使用convert_objects

0.17.0

答案 1 :(得分: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'>

答案 2 :(得分:0)

我有时会使用自定义函数

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

然后我通过

使用自定义功能
 df['FloatField']=df['StrField'].apply(str_to_flt)

然后我可以识别出坏的&#34;值设置为NaN。

希望这有帮助。