pandas 对数据框的名称进行切片以提取年份

mwyxok5s  于 2023-03-21  发布在  其他
关注(0)|答案(1)|浏览(123)

我想自动获得每个 Dataframe 的名称-作为一个字符串-并将该字符串切片以获得最后4个字符,即年份。在每个解决方案中,我发现 Dataframe 的名称需要重新分配,这对我来说不起作用。
到目前为止,我已经尝试过:

for df in (grid_2010, grid_2018, grid_2022):
    df_year = str(df)
    print('{}: col1 vs. col2'.format(df_year[-4]))
    print(df['col1'].corr(df['col2']))

但我得到的是m而不是年份

m: col1 vs. col2
0.9915766248731003
m: col1 vs. col2
0.9660661083576073
m: col1 vs. col2
0.9537479266164907

我想要:

2010: col1 vs. col2
0.9915766248731003
2018: col1 vs. col2
0.9660661083576073
2022: col1 vs. col2
0.9537479266164907

我还尝试将每个df作为列表中的一个项目发送,并相应地切片:

for df in (grid_2010, grid_2018, grid_2022):
    df_year = list[str(df)]
    print('{}: col1 vs. col2'.format(df_year[0][-4]))
    print(df['col1'].corr(df['col2']))

...但是我得到了与上面完全相同的结果。我正在尝试一种方法来将dfMap到列表中相应的年份,但到目前为止还没有运气。
这是其中一个数据框的子集视图,包含我需要的列。所有数据框都具有相同的结构,只是名称(如上所述)和列值不同

Col1  Col2
0  42244  1078
1  56068  1285
2  63894  1860
3   5850   664

欢迎任何帮助和/或建议!

rxztt3cl

rxztt3cl1#

正如我在评论中提到的,由于年份不在 Dataframe 中,并且您知道年份的唯一方法是因为您的变量声明,因此您可以在for循环中使用tuples

for df, year in ((grid_2010, 2010), (grid_2018, 2018), (grid_2022, 2022)):
    print('{}: col1 vs. col2'.format(year))
    print(df['col1'].corr(df['col2']))

相关问题