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
。啊,好的,是的,你的答案更好。下面的问题贴在这里:后续问题贴在这里: