2014-09-25 97 views
2

我有相同结构的多个CSV文件,其原文件名后命名他们,我想读取多个CSV文件DataFrames和

  1. 分配文件数据框名称以相同的顺序: 1.csv -> data1, 2.csv ->data2
  2. 而以同样的方式分配列: delta1 = data1["C"] - data1["A"]

我希望把它放到for循环,如下所示:

for i in range (1, 22): 
    data%i = pd.read_csv('CSV/' + str(i) + '.csv') 
    delta%i = data%i["C"] - data%i["A"] 

# And I want to compare the 2 series from dataframe.column to find a set intersection 
set(data1[data1.delta1 > 0].column) & set(data2[data2.delta2 == 0].column) 
set(data2[data2.delta2 > 0].column) & set(data3[data3.delta3 == 0].column) 

但肯定是错误的语法,在for循环,有没有更好的方式来编写它,这样的循环之后,我可以得到:

data1, data2, data3 ...

相应:

delta1, delta2, delta3 ...

+0

对不起,你只是问如何添加一个新的列?如果是这样的话:'data ['delta'] = data ['C'] - data ['A']' – EdChum 2014-09-25 09:00:05

+0

我的意思是在读取1.csv 2时如何将df名称分配为data1 data2 data3等。 csv withih for循环,可能吗? – 2014-09-25 15:28:29

+1

这个名字有点不相关,你可以将生成的df附加到列表或字典中,名称只是对象的引用,为什么这很重要。从概念上讲,你所要求的对我没有意义,你需要更好地解释并编辑这个到你的问题 – EdChum 2014-09-25 15:30:59

回答

0

这里是你想要使用字典的一个实现(也可以在评论中用@EdChum建议):

data = {} 
delta = {} 

for i in range (1, 22): 
    data[i]= pd.read_csv('CSV/' + str(i) + '.csv') 
    delta[i] = data[i]["C"] - data[i]["A"] 

# And I want to compare the 2 series from dataframe.column to find a set intersection 
set(data[1][data[1].delta[1] > 0].column) & set(data[2][data[2].delta[2] == 0].column) 
set(data[2][data[2].delta[2] > 0].column) & set(data[3][data[3].delta[3] == 0].column) 

我真的会推荐使用像上面这样的词典。但是,如果你真的真的真的坚持动态分配的变量,比如你想在你的问题做的,你可以做以下的高度危险,不推荐件事:

您可以分配变量使用动态:

globals()[variable_name]=variable_value 

再次,你真的不应该这样做。没有理由这样做下去,但在这里,你走了,这里是你的代码确实正是你想要的东西的修改:

for i in range (1, 22): 
    datai = "data"+str(i) 
    deltai = "delta"+str(i) 
    globals()[datai] = pd.read_csv('CSV/' + str(i) + '.csv') 
    globals()[deltai] = globals()[datai]["C"] - globals()[datai]["A"] 

# And I want to compare the 2 series from dataframe.column to find a set intersection 
set(data1[data1.delta1 > 0].column) & set(data2[data2.delta2 == 0].column) 
set(data2[data2.delta2 > 0].column) & set(data3[data3.delta3 == 0].column) 
0

你可以与当地大熊猫功能所需的一切,而不是类型的字典。

首先阅读您的CSV到一个列表:

df_list = [] 
for i in range(1, 22): 
    df_list.append(pd.read_csv("{i}.csv".format(i))) 

现在Concat的他们:

df = pd.concat(df_list, keys=range(1,22)) 

现在你的数据帧df与您加载的文件的关键索引。

否则例如df.loc[1]将让你从文件中的数据1.csv

您现在可以设置您的增量难熬一个操作:

df["delta"] = df["C"] - df["A"] 

而且你可以用DataFrame.loc操作访问这些增量太,如下所示:

df.loc[2,"delta"] 

该方法更原生pandas并且可能会扩展更大的数据集更好。