Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 修改循环中的数据帧_Python_Loops_Pandas_Dataframe - Fatal编程技术网

Python 修改循环中的数据帧

Python 修改循环中的数据帧,python,loops,pandas,dataframe,Python,Loops,Pandas,Dataframe,给定此数据帧: 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 但我不想对每一列都这样做,而是希望在循环中这样做

给定此数据帧:

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
更新: 我的实际数据帧将有一些我不需要的列,并且这些列不会以任何顺序排列,因此我需要能够按名称获取这些列


提前谢谢

您应该使用
loc

a = df.loc[:,0]
然后像这样循环

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

您应该使用
loc

a = df.loc[:,0]
然后像这样循环

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

简单的列表理解就足够了

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
中的每个元素都是自己的数据帧,对应于原始数据帧中的每个数据帧。此外,您甚至不需要
字段
,而是使用
df.columns

简单的列表理解就足够了

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
中的每个元素都是自己的数据帧,对应于原始数据帧中的每个数据帧。此外,您甚至不需要
字段
,而是使用
df.columns

或者您可以尝试这样做,而是创建
df
的副本,此方法将返回单个
数据帧
,而不是
列表
,但是,我认为将
数据帧
保存到列表中更好

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

或者您可以尝试此方法,而不是创建
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

考虑到您可以直接在列上进行迭代,这太过分了。使用
df.loc
。啊,好的,你的答案更好。考虑到你可以直接在列上迭代,这太过分了。使用
df.loc
。啊,好的,是的,你的答案更好。下面的问题贴在这里:后续问题贴在这里: