环路

环路

问题描述:

修改DataFrames鉴于这个数据帧:环路

import pandas as pd 
df=pd.DataFrame({'A':[1,2,3],'B':[4,5,6],'C':[7,8,9]}) 
df 
    A B C 
0 1 4 7 
1 2 5 8 
2 3 6 9 

我想创建3个新的数据帧;每列一列。 我可以在这样的时间这样做一个:

a=pd.DataFrame(df[['A']]) 
a 
    A 
0 1 
1 2 
2 3 

但不是这样做的每一列,我希望做一个循环。

这是我已经试过:

a=b=c=df.copy() 
dfs=[a,b,c] 
fields=['A','B','C'] 
for d,f in zip(dfs,fields): 
    d=pd.DataFrame(d[[f]]) 

...但是,当我再打印每一个,我得到了整个原始数据帧,而不是利益只是列。

a 
     A B C 
    0 1 4 7 
    1 2 5 8 
    2 3 6 9 

更新: 我的实际数据帧都会有,我不需要和列不会在任何种类的顺序某些列,所以我需要能够通过名称来获取列。

在此先感谢!

或者你可以试试这个,而不是创造的df副本,此方法将返回的结果为单Dataframe,不是list,不过,我想保存Dataframe到一个列表更好

dfs=['a','b','c'] 
fields=['A','B','C'] 
variables = locals() 
for d,f in zip(dfs,fields): 
    variables["{0}".format(d)] = df[[f]] 

a 
Out[743]: 
    A 
0 1 
1 2 
2 3 
b 
Out[744]: 
    B 
0 4 
1 5 
2 6 
c 
Out[745]: 
    C 
0 7 
1 8 
2 9 
+0

后续问题发布在这里:https://*.com/questions/45511995/pandas-modify-dataframes-in-loop-part-2 –

您应该使用loc

a = df.loc[:,0] 

,然后遍历像

for i in range(df.columns.size): 
    dfs[i] = df.loc[:, i] 
+0

这是矫枉过正考虑到你可以直接迭代列。并使用'df.loc'。 –

+0

啊好吧,是的,你的回答是更好的 –

一个简单的列表理解应该是足够的。

In [68]: df_list = [df[[x]] for x in df.columns] 

打印出清单,这是你会得到什么:

In [69]: for d in df_list: 
    ...:  print(d) 
    ...:  print('-' * 5) 
    ...:  
    A 
0 1 
1 2 
2 3 
----- 
    B 
0 4 
1 5 
2 6 
----- 
    C 
0 7 
1 8 
2 9 
----- 

df_list每个元素是它自己的数据帧,相当于从原来的每个数据帧。此外,您甚至不需要fields,而是使用df.columns