pandas - 将包含计算的列添加到多个 CSV
问题描述
我对 Python 非常熟悉,并且在尝试自动执行某些计算时遇到了一些问题。
我知道这可以添加一个名为“Returns”的新列,它将当前的“值”划分为csv之前的“值”:
import pandas as pd
import numpy as np
import csv
a = pd.read_csv("/Data/a_data.csv", index_col = "time")
a ["Returns"] = (a["value"]/a["value"].shift(1) -1)*100
但是,我有很多这样的 CSV。我需要在将它们合并在一起之前进行此计算。所以我希望写一些刚刚遍历所有 CSV 并进行计算并添加列的东西,但显然这是不正确的,因为我得到了语法错误:
import pandas as pd
import numpy as np
import csv
a = pd.read_csv("/Data/a_data.csv", index_col = "time")
b = pd.read_csv("/Data/b_data.csv", index_col = "time")
c = pd.read_csv("/Data/c_data.csv", index_col = "time")
my_lists = ['a','b','c']
for my_list in my_lists:
{my_list}["Returns"] = ({my_list}["close"]/{my_list}["close"].shift(1) -1)*100
print(f"Calculating: {my_list.upper()}")
我确信有一种简单的方法可以做到这一点,我只是在我的 Python 教育中还没有达到,所以任何指导将不胜感激!
解决方案
- 假设“ close ”和“ time ”是在每个csv 文件中定义的字段,您可以定义一个读取每个文件、执行移位并返回数据帧的函数:
def your_func(my_file): # this function takes a file name as an argument.
my_df = pd.read_csv(my_file, index_col = "time") # The function reads its content into a data frame,
my_df["Returns"] = (my_df["close"]/{my_df}["close"].shift(1) -1)*100 # makes the calculation
return my_df #and returns it as an output.
- 然后作为主要代码,您从带有glob包的文件夹中收集所有 csv 文件。使用上述函数,您可以为每个文件构建一个数据框,并完成计算。
import glob
path =r'/Data/' # path to the directory where you have the csv files
filenames = glob.glob(path + "/*.csv") # grab the csv files names using glob package with path+all csv files present
for filename in filenames: # loop into all csv files names in the list of csv files present in the directory
df= your_func (filename) # call the function, defined above block of code, that reads the file from its name as argument, then makes the calculation and returns it.
print (df)
上面是显示结果的数据框的打印件;我不确定你打算用upper做什么(我不认为这是数据框上的函数)。最后,这将返回独立的数据帧,并在其他或最终转换之前完成计算。
推荐阅读
- wpf - WPF Win10 禁用自动播放
- amazon-web-services - SNS 中的时间戳消息,因为它通过
- c++ - 声明 RAII 类型 (unique_lock) 的 C++ 推荐方式
- joomla - 在 Joomla 中使用 PHPOffice/PHPSpreadsheet
- javascript - 从外部javascript获取动态变量
- javascript - 使用角度更新多个 html 输入元素
- c++ - Qt - QGridLayout
- javascript - 如何在 javascript 中构建交互式 3D 图形
- android - 无法验证 dex:错误的方法句柄类型 7
- python - 在这个函数中传递 kwargs 的最 Pythonic 方式是什么?