问题描述
我有两个使用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
转换为浮点数时不起作用,因为浮点数之间没有-
。这就是为什么您会出错。
您可以将降雨值转换为CASE
或float
,但是日期不能转换。要将日期转换为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