python - 经过一定次数的迭代后打开一个新的 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
..... ......
解决方案
为什么你使用 panda 的 read_csv() 函数而不是对应的 df.write_csv()?
如果您在数据帧中加载,根据需要转换数据并在最后执行 write_csv(),它将更简单,并且可能更快。
如果你想创建多个文件,你只需要为你想要的行切片数据框。
推荐阅读
- ibm-midrange - 在 CL 编程中,如何读取物理文件成员的最后一条记录
- php - Laravel foreach select 仅显示具有相同 id 的选项
- python-3.x - Pandas 将科学数转换为普通数(浮点数)
- sql - 如何在sql中查找主管名称
- python - 有没有办法在 Pyspark ALS 中使用 64 位用户/项目 ID?
- php - 如果在 Column 中找到 NULL,则显示
- mysql - 每次我输入 MySQL 命令时,用户 'root'@'localhost' 的访问被拒绝
- php - 使用 Laravel 在 vue js 中选择当前无法正常工作的下拉列表
- android - 将 CustomView 保存为位图
- c++ - 在 API 中处理复杂的嵌套类型