Python将对象转换为float

时间:2018-01-04 12:01:18

标签: python pandas

我从csv文件中读取了一些天气数据作为名为“weather”的数据帧。问题是列的数据类型之一是一个对象。这是奇怪的,因为它表示温度......无论如何,如何将其更改为浮点数?我试过to_numeric但它无法解析它。

weather.info()
weather.head()

<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 304 entries, 2017-01-01 to 2017-10-31
Data columns (total 2 columns):
Temp    304 non-null object
Rain    304 non-null float64
dtypes: float64(1), object(1)
memory usage: 17.1+ KB

           Temp     Rain
Date        
2017-01-01  12.4    0.0
2017-02-01  11      0.6
2017-03-01  10.4    0.6
2017-04-01  10.9    0.2
2017-05-01  13.2    0.0

5 个答案:

答案 0 :(得分:11)

  • 您可以使用pandas.Series.astype
  • 您可以这样做:

    weather["Temp"] = weather.Temp.astype(float)
    
  • 您还可以使用pd.to_numeric将列从object转换为float

  • 有关如何使用它的详细信息,请查看此链接:http://pandas.pydata.org/pandas-docs/version/0.20/generated/pandas.to_numeric.html
  • 示例:

    s = pd.Series(['apple', '1.0', '2', -3])
    print(pd.to_numeric(s, errors='ignore'))
    print("=========================")
    print(pd.to_numeric(s, errors='coerce'))
    
  • 输出:

    0    apple
    1      1.0
    2        2
    3       -3
    =========================
    dtype: object
    0    NaN
    1    1.0
    2    2.0
    3   -3.0
    dtype: float64
    
  • 在您的情况下,您可以执行以下操作:

    weather["Temp"] = pd.to_numeric(weather.Temp, errors='coerce')
    
  • 其他选项是使用convert_objects
  • 示例如下

    >> pd.Series([1,2,3,4,'.']).convert_objects(convert_numeric=True)
    
    0     1
    1     2
    2     3
    3     4
    4   NaN
    dtype: float64
    
  • 您可以按如下方式使用:

    weather["Temp"] = weather.Temp.convert_objects(convert_numeric=True)
    
  • 我向您展示了一些示例,因为如果您的任何列没有数字,那么它将转换为NaN ...因此在使用时请小心

    < / LI>
  • ENJOY !!!!!!!!!!!!!! :)

答案 1 :(得分:5)

我尝试了这里建议的所有方法,但遗憾的是都没有奏效。相反,发现这是有效的:

df['column'] = pd.to_numeric(df['column'],errors = 'coerce')

然后使用:

print(df.info())

答案 2 :(得分:0)

我最终使用了:

weather["Temp"] = weather["Temp"].convert_objects(convert_numeric=True)

除了得到以下消息外,它工作得很好。

C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:3: FutureWarning:
convert_objects is deprecated.  Use the data-type specific converters pd.to_datetime, pd.to_timedelta and pd.to_numeric.

答案 3 :(得分:0)

您可以尝试以下操作:

df['column'] = df['column'].map(lambda x: float(x))

答案 4 :(得分:0)

首先检查您的数据,因为如果您使用“,”而不是“.”,您可能会收到错误消息。 如果是这样,您需要将每个 ',' 转换为 '.'带函数:

if items.isEmpty {
    collectionView.isHidden = true
    emptyView.isHidden = false
} else {
    collectionView.isHidden = false
    performQuery(animate: false)
    emptyView.isHidden = true
}

那么你需要在你的列中的每一行上应用这个函数:

def replacee(s):
i=str(s).find(',')
if(i>0):
    return s[:i] + '.' + s[i+1:]
else :
    return s 

那么转换函数就可以正常工作了:

dfOPA['Montant']=dfOPA['Montant'].apply(replacee)