环路
修改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
您应该使用loc
a = df.loc[:,0]
,然后遍历像
for i in range(df.columns.size):
dfs[i] = df.loc[:, i]
这是矫枉过正考虑到你可以直接迭代列。并使用'df.loc'。 –
啊好吧,是的,你的回答是更好的 –
一个简单的列表理解应该是足够的。
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
。
后续问题发布在这里:https://*.com/questions/45511995/pandas-modify-dataframes-in-loop-part-2 –