求助:使用Python Numpy计算currency.csv中汇率的多维度统计指标
用Numpy处理汇率CSV的计算指南
Hey there! 作为Python新手,用numpy处理CSV数据确实需要一步步来,我会帮你拆解每个任务,代码里加详细注释,你跟着走就行~
首先咱们先明确前提:假设你的currency.csv结构是第一列是日期(格式如"2019-01-05"),后续每列是对应货币的汇率,第一行是表头(比如货币名称USD、EUR、GBP等)。如果你的CSV结构略有不同,后面可以根据实际情况调整代码。
第一步:导入库并加载数据
首先咱们需要导入numpy,然后加载CSV文件。numpy的genfromtxt方法很适合处理带表头的CSV:
import numpy as np # 加载CSV文件,skip_header=1跳过表头,delimiter是分隔符(一般CSV是逗号) # 我们把日期列单独拿出来,汇率数据存在另一个数组里 data = np.genfromtxt('currency.csv', delimiter=',', dtype=None, encoding='utf-8', skip_header=1) dates = data[:, 0] # 第一列是日期 exchange_rates = data[:, 1:].astype(float) # 从第二列开始是汇率,转成浮点型 # 读取表头(货币名称) with open('currency.csv', 'r', encoding='utf-8') as f: headers = f.readline().strip().split(',')[1:] # 跳过日期列的表头
任务1:每种货币过去5年的平均汇率
这个很简单,直接对每种货币的所有汇率求均值:
# axis=0表示按列计算(每列对应一种货币) avg_5years = np.mean(exchange_rates, axis=0) # 打印结果 for currency, avg in zip(headers, avg_5years): print(f"{currency}过去5年的平均汇率:{avg:.4f}")
任务2:每种货币每年的平均汇率
这里需要先把日期转换成年份,然后按年份分组计算均值。咱们可以先从日期字符串里提取年份:
# 从日期字符串提取年份,比如"2019-01-05"提取出2019 years = np.array([int(date.split('-')[0]) for date in dates]) unique_years = np.unique(years) # 获取所有不重复的年份 # 遍历每个年份,计算该年份每种货币的平均汇率 for year in unique_years: # 找到该年份对应的所有行的索引 year_mask = (years == year) # 计算该年份的平均汇率 yearly_avg = np.mean(exchange_rates[year_mask], axis=0) print(f"\n{year}年各货币平均汇率:") for currency, avg in zip(headers, yearly_avg): print(f"{currency}: {avg:.4f}")
任务3:每种货币过去5年汇率的最低值与最高值
用numpy的min和max方法,同样按列计算:
# 计算最低值 min_rates = np.min(exchange_rates, axis=0) # 计算最高值 max_rates = np.max(exchange_rates, axis=0) # 打印结果 for currency, min_rate, max_rate in zip(headers, min_rates, max_rates): print(f"{currency}过去5年汇率范围:{min_rate:.4f} ~ {max_rate:.4f}")
任务4:每种货币过去5年汇率的标准差
标准差用std方法,默认是总体标准差(如果要样本标准差可以加ddof=1):
# 计算总体标准差(ddof=0),如果需要样本标准差改成ddof=1 std_5years = np.std(exchange_rates, axis=0, ddof=0) for currency, std in zip(headers, std_5years): print(f"{currency}过去5年汇率的标准差:{std:.4f}")
任务5:每种货币每年汇率的标准差
和任务2类似,按年份分组后计算标准差:
for year in unique_years: year_mask = (years == year) yearly_std = np.std(exchange_rates[year_mask], axis=0, ddof=0) print(f"\n{year}年各货币汇率标准差:") for currency, std in zip(headers, yearly_std): print(f"{currency}: {std:.4f}")
小提示
如果你的CSV里有缺失值(比如某些日期的汇率为空),可以在加载数据的时候用filling_values参数填充,比如genfromtxt里加filling_values=np.nan,然后计算的时候用np.nanmean、np.nanmin等方法跳过缺失值,比如np.nanmean(exchange_rates, axis=0)。
内容的提问来源于stack exchange,提问作者user3529487
相关产品推荐
相关产品推荐

