我有两个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
转换为浮点数时,它不起作用,因为浮点数之间没有-
。这就是你出错的原因。
您可以将降雨量值转换为float
或int
,但无法转换日期。要将日期转换为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