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

问题描述

我有两个使用numpy导入到python的csv文件
数据有2列:

[['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:无法将字符串转换为float:'2019-04'

解决方法

将str转换为float如下:

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

但是,错误消息指出问题是将2019-04转换为浮动形式。

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

,

您可以将降雨值转换为CASEfloat,但是日期不能转换。要将日期转换为int,您必须分割字符串并将其重新组合为日期格式,然后将其转换为毫秒,如下所示:

int

这样,您假设它是该月的第一个日期。

,

您的错误消息显示为无法将字符串转换为浮点型, 但实际上您的问题有所不同。

您的数组包含 string 列,应将其转换为

  • month -到 Period (月),
  • 总雨量-浮动

不幸的是,已经创建了 Numpy 来处理所有 单元格是相同类型的,所以 Pandas 是更方便的工具, 每个列可以是其自有类型。

首先,将您的 Numpy 数组(假定为 arr )转换为 pandasonic 数据框:

import pandas as pd

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

我从初始行中获取列名,并从中获取数据 接下来的行。打印 df 以查看结果。

到目前为止,这两列仍然都是 object 类型(实际上是 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