Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.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 如果循环要将列复制到单独的数据帧,请相应地重命名df_Python_Pandas_Loops_Dataframe - Fatal编程技术网

Python 如果循环要将列复制到单独的数据帧,请相应地重命名df

Python 如果循环要将列复制到单独的数据帧,请相应地重命名df,python,pandas,loops,dataframe,Python,Pandas,Loops,Dataframe,我尝试获取一个数据帧,从第二列开始遍历每一列,然后将第一个常量列+下一个常量列逐个复制到新的数据帧 df = pd.DataFrame({'Year':[2001 ,2002, 2003, 2004, 2005], 'a': [1,2, 3, 4, 5], 'b': [10,20, 30, 40, 50], 'c': [0.1, 0.2, 0.3, 0.4,0.5]}) df 为了得到与此输出类似的结果,但我需要它进行循环,因为我最多可以有40列来运行逻辑 df_a=pd.DataFrame(

我尝试获取一个数据帧,从第二列开始遍历每一列,然后将第一个常量列+下一个常量列逐个复制到新的数据帧

df = pd.DataFrame({'Year':[2001 ,2002, 2003, 2004, 2005], 'a': [1,2, 3, 4, 5], 'b': [10,20, 30, 40, 50], 'c': [0.1, 0.2, 0.3, 0.4,0.5]})
df
为了得到与此输出类似的结果,但我需要它进行循环,因为我最多可以有40列来运行逻辑

df_a=pd.DataFrame()
df_a=df[['Year', 'a']].copy()
df_b=df[['Year', 'b']].copy()
df_c=df[['Year', 'c']].copy()
print(df_a)
print(df_b)
print(df_c)

如果我知道如何命名df_uz['name of column It's copying'],那也太好了。非常感谢您,如果是重复的,请原谅。

我建议您通过听写理解将其拆分,然后您将拥有一个单独数据帧的词典。例如:

dict_of_frames = {f'df_{col}':df[['Year', col]] for col in df.columns[1:]}
为您提供
df_a
df_b
df_c
词典,您可以像访问任何其他词典一样访问这些词典:

>>> dict_of_frames['df_a']
   Year  a
0  2001  1
1  2002  2
2  2003  3
3  2004  4
4  2005  5

>>> dict_of_frames['df_b']
   Year   b
0  2001  10
1  2002  20
2  2003  30
3  2004  40
4  2005  50

您需要创建一个数据帧字典,如下所示,列名作为键,子数据帧作为值

df = df.set_index('Year')
dict_ = {col: df[[col]].reset_index() for col in df.columns}
您可以简单地使用列名访问字典并获取相应的数据帧

dict_['a']
输出:

    Year    a
0   2001    1
1   2002    2
2   2003    3
3   2004    4
4   2005    5
----------------------------------------
   Year  a
0  2001  1
1  2002  2
2  2003  3
3  2004  4
4  2005  5
----------------------------------------
   Year   b
0  2001  10
1  2002  20
2  2003  30
3  2004  40
4  2005  50
----------------------------------------
   Year    c
0  2001  0.1
1  2002  0.2
2  2003  0.3
3  2004  0.4
4  2005  0.5
您可以通过以下方式迭代
命令

for col, df in dict_.items():
    print("-"*40) #just for separation
    print(df) #or print(dict_[col])
输出:

    Year    a
0   2001    1
1   2002    2
2   2003    3
3   2004    4
4   2005    5
----------------------------------------
   Year  a
0  2001  1
1  2002  2
2  2003  3
3  2004  4
4  2005  5
----------------------------------------
   Year   b
0  2001  10
1  2002  20
2  2003  30
3  2004  40
4  2005  50
----------------------------------------
   Year    c
0  2001  0.1
1  2002  0.2
2  2003  0.3
3  2004  0.4
4  2005  0.5
您不需要创建字典来复制和访问所需的数据。您可以简单地复制数据帧(如果有可变元素,则进行深度复制),然后使用索引来访问特定系列:

dfs = df.set_index('Year').copy()

print(dfs['a'])

Year
2001    1
2002    2
2003    3
2004    4
2005    5
Name: a, dtype: int64
您可以通过以下方式迭代列:


是的,这给出了系列,但是它们可以通过
系列轻松地转换为数据帧。重置索引()
系列。再次,到\u框架()

,我们得到了相同的基本答案!你比我先发了x秒。我想,我应该快点@萨库:谢谢你@哈夫潘!对不起,我要求上面的这个,所以如果我需要遍历这些帧,我应该做什么:对于范围(1,len(df.columns[4:])中的I:finaldf={dict_of_frames['df_{col}],对于df.columns[4:}中的col???@MarinaGoldylocks查看编辑。我希望这会清除你如何迭代dict_uuz。让我知道它是如何进行的。谢谢你,@harvpan-非常有用!一切都正常!非常感谢@sacul!再问一个问题,如果我需要迭代这些帧,我应该做什么:范围内的I(1,len(df.columns[4:]):finaldf={dict_of_frames['df_{col}]]for col in df.columns[4:][}?我不太清楚你的意思,但我会反复说:
for df in dict_of_frames.keys():dict_of_frames[df]…
谢谢@sacul-你们这些家伙太棒了!向堆栈溢出社区致敬!谢谢你们,@jpp-这是一个不错的选择!