首页 > 解决方案 > 经过一定次数的迭代后打开一个新的 CSV 文件

问题描述

此代码计算来自 csv 文件的两列价格数据的比率,并将比率写入另一个。尽管这段代码变慢了,但经过几百次计算。在已经计算出给定数量的比率后,如何打开一个新的 CSV 文件来存储比率。

sector_name = ['asset_management', 'basic_materials', 'conglomerates', 'consumer_goods', 'financials', 'healthcare', 'industrial_goods', 'services', 'technology', 'utilities']

def data_sector_ratios():

    for sector,name in zip(list_all_sectors, sector_name):

        for ticker in sector:

            df = pd.read_csv(.../price_data_file.csv)
            df.drop(df.columns[df.columns.str.contains('unnamed',case = False )],axis = 1, inplace = True)
            fieldnames = ["PAIR", "RATIO"]

            with open(.../sector_ratios.csv, 'w') as file:                
                writer = csv.DictWriter(file, fieldnames=fieldnames, lineterminator = '\n')
                writer.writeheader()
                cols = list(df.columns[1:])
                for i,c in enumerate(cols[:-1]):
                    for c2 in cols[i+1:]:
                        df['{}/{}'.format(c,c2)] = df[c]/df[c2]
                        dff = df['{}/{}'.format(c,c2)]
                        dff.dropna(inplace=True)
                        length = len(dff.index)                        
                        start = dff.iloc[0]
                        end = dff.iloc[length-1]
                        change = str((end - start)/start)
                        pair = df.columns[-1]                        
                        row = {"PAIR": pair, "RETURNS": change}
                        writer.writerow(row)
                        print("{}/{} RATIO CALCULATED".format(c,c2))

一些部门有大约 700 列。因此 (700^2 - 700)/2 = ~490'000 比率。大约 20'000 后创建一个新文件 ex:basic_materials_ratios_2 或其他东西。价格数据 csv 文件如下所示:

https://i.stack.imgur.com/BsDXT.png

编辑:

输出 CSV 文件。我只想在每次通过 for 循环计算比率时继续添加行。

PAIR        RATIO
A/AA       xxxxxx
A/AABA     xxxxxx
A/AAL      xxxxxx
.....      ......

标签: pythonpandascsv

解决方案


为什么你使用 panda 的 read_csv() 函数而不是对应的 df.write_csv()?

如果您在数据帧中加载,根据需要转换数据并在最后执行 write_csv(),它将更简单,并且可能更快。

如果你想创建多个文件,你只需要为你想要的行切片数据框。


推荐阅读