从CSV文件中读取数据时,找到列表的累积总和

时间:2019-08-19 06:00:41

标签: python pandas list csv cumsum

我想找到cumulative sum of the list

我正在读取deg_pvsyst_runs文件夹中的30个类似的csv文件。文件命名为:

 "Energy_Base_Year00_-0.6%modqual.csv",
 "Energy_Base_Year01_-0.3%modqual.csv",  ......,  
 "Energy_Base_Year30_-8.4%modqual.csv

我正在上述每个csv文件中读取E_Grid列(跳过具有标题信息的行0-9、11和12之后)。请建议

a)如果有一种更短/更轻松的方式在跳过行的同时读取csv的方式,而不是我做过的事情(skiprows=[0,1,2,3,4,5,6,7,8,9,11,12]

b)如果使用itertools方法或cumsum函数将是一个更好的选择,以计算称为Cumulative_Annual_Deg的列表的累加总和。

代码:

import os, csv, re
import pandas as pd
from itertools import accumulate

Year, Degradation, Mean_EP, Annual_Deg, Cumulative_Annual_Deg =[],[],[],[],[]


cwd = os.getcwd()
csv_files = [f for f in os.listdir(cwd + '\\' + 'deg_pvsyst_runs') if f.endswith('.csv')]

for i,j in enumerate(csv_files):
    df = pd.read_csv(os.getcwd() + "\\deg_pvsyst_runs\\" + j, skiprows=[0,1,2,3,4,5,6,7,8,9,11,12])
    Mean_EP.append(df['E_Grid'].sum()/10**6)
    Annual_Deg.append((Mean_EP[i-1] - Mean_EP[i])/Mean_EP[i-1])
    Cumulative_Annual_Deg.append(list(accumulate(Annual_Deg[i])))

错误:

Cumulative_Annual_Deg.append(list(accumulate(Annual_Deg[i])))

   TypeError: 'numpy.float64' object is not iterable

编辑:

Annual_Deg是由在csv文件之间计算的增量(百分比变化)组成的列表。我想计算Cumulative_Annual_Deg来计算累计和。

所需的输出:

  • Annual_Mean_EP = [9559.88, 9533.31, 9506.67,...,8731.85]

    Annual_Deg = [0, 0.00278, 0.00279,...,0.00297]

    Cumulative_Annual_Deg' = [0, 0.00278, 0.00557, ..., 0.08661]

或屏幕截图

enter image description here

1 个答案:

答案 0 :(得分:1)

可以在计算列表之后计算累计和。因此,应将累加行带到for循环之外。 替换以下行

    Cumulative_Annual_Deg.append(list(accumulate(Annual_Deg[i])))

Cumulative_Annual_Deg = list(accumulate(Annual_Deg))

您可以在https://docs.python.org/3/library/itertools.html#itertool-functions

上找到有关itertools的更多信息。