如何在循环中包装相同的代码块(或应用函数)

时间:2019-03-11 17:01:26

标签: python loops dataframe

我想在一个循环中包装一个代码块,该代码块对来自不同csv文件的导入DataFrame执行相同的操作。考虑一个例子: 我导入

apples=pd.read_csv("path\dataset_1.csv")
oranges=pd.read_csv("path\dataset_2.csv")

导入的DataFrame的结构,格式和列名称完全相同。 然后,我在第一组上执行操作。例如

apples_1 = apples [["column A", "column B"]]
apples_1. columns= ["bad", "good"]
apples_2 = apples [["column C", "column D"]]
apples_2. columns = [ "bad", "good"]
apples_3=pd.concat([apples_1,apples_2],axis=0) 

然后,但是我必须在第二个数据帧上执行完全相同的操作-橙色。我提醒第二个DataFrame具有与第一个相同的列名,并且在操作后将具有相同的重命名列。

 oranges_1 = oranges [["column A", "column B"]]
 oranges_1. columns= ["bad", "good"]
 oranges_2 = oranges [["column C", "column D"]]
 oranges_2. columns = [ "bad", "good"]
 oranges_3=pd.concat([oranges_1,oranges_2],axis=0) 

如果我有10个DataFrame并不得不一遍又一遍地编写相同的代码来执行相同的操作,那将不是Python风格。所以我想知道是否有一种优雅的方法可以通过循环来执行此操作或应用一个函数。在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

for i in range(1,11):
    df = pd.read_csv("path\dataset_{0}.csv".format(i))
    adf=pd.concat([df[["column A", "column B"]],df[["column C", "column D"]]],axis=0)
    adf.columns = [ "bad", "good", "bad", "good"]
    # do operations on adf

遍历每个csv,将其读入df并对其进行操作。只要所有的csv文件都具有相同的列名(如问题中所述),它就可以工作。