如何使用numpy将导入的csv中的一列从字符串转换为浮点



我有两个csv文件,我已经使用numpy将它们导入到python中
数据有两列:

[['month' 'total_rainfall']        
['1982-01' '107.1']    
['1982-02' '27.8']    
['1982-03' '160.8']    
['1982-04' '157']    
['1982-05' '102.2']   

我需要创建一个2D数组,并使用"total_rainfall"列计算统计信息。(平均值、标准偏差、最小值和最大值(

所以我有这个:

import numpy as np    
datafile=np.genfromtxt("C:rainfall-monthly-total.csv",delimiter=",",dtype=None,encoding=None)    
print(datafile)    
rainfall=np.asarray(datafile).astype(np.float32)    
print (np.mean(datafile,axis=1)) 

ValueError:无法将字符串转换为浮点值:"2019-04">

将str转换为float如下:

>>> a = "545.2222"
>>> float(a)
545.22220000000004
>>> int(float(a))
545

错误消息表示问题在于将2019-04转换为float。

当您想将2019-04转换为浮点数时,它不起作用,因为浮点数之间没有-。这就是你出错的原因。

您可以将降雨量值转换为floatint,但无法转换日期。要将日期转换为int,您必须拆分字符串并将其组合为日期格式,然后将其转换为毫秒格式:

from datetime import datetime
month1 = '1982-01' 
date = datetime(month1.split('-')[0], month1.split('-')[1], 1)
milliseconds = int(round(date.timestamp() * 1000))

通过这种方式,您可以假定它是本月的第一个日期。

您的错误消息为无法将字符串转换为float,但实际上你的问题有点不同。

您的数组包含字符串列,这些列应该被转换:

  • -至(月(
  • total_rainfall-到浮动

不幸的是,Numpy是为了处理所有细胞是相同的类型,因此更方便的工具是Pandas,其中每个列可以是其自己的类型。

首先,将Numpy数组(我假设arr(转换为pandasonicDataFrame:

import pandas as pd
df = pd.DataFrame(arr[1:], columns=arr[0])

我从最初的行取了列名,从以下行。打印df以查看结果。

到目前为止,这两列仍然是对象类型(实际上是string(,所以唯一要做的就是转换这两列,每一个都有自己想要的类型:

df.month = pd.PeriodIndex(df.month, freq='M')
df.total_rainfall = df.total_rainfall.astype(float)

现在,当您运行df.info()时,您将看到列的类型正确。

要处理您的数据,请同时使用Pandas。这是一个更方便的工具。

例如,要获得季度总额,您可以运行:

df.set_index('month').resample('Q').sum()

获取(针对您的数据样本(:

total_rainfall
month                 
1982Q1           295.7
1982Q2           259.2

相关内容

  • 没有找到相关文章

最新更新