首页 > 解决方案 > 如何灵活更改数据框的名称?

问题描述

我有许多数据框,名称如下 data_v1,data,v2,data_v3,data_v11,data_v12 等。

现在我喜欢遍历每个数据帧并对每个数据帧应用一个函数。所以我需要提供数据框名称。因为名字在第一部分是一样的。第二部分 after_ 是不同的。那么如何以如下方式编写数据框名称?下面有一个错误说 data_ 没有定义。非常感谢你的帮助

variable=['v1','v2','v3','v11','v12','v13']
for var in variable:
    function(data_%s %var)

标签: pythonpandas

解决方案


  • AB提供
    • [var for var in dir() if isinstance(eval(var), pd.core.frame.DataFrame)]
      • 这会创建一个数据框名称列表作为字符串
    • isinstance(eval(var), pd.core.frame.DataFrame)DataFrame在当前实例中找到任何。
import pandas as pd

# creates a list of strings
df_names_str = [var for var in dir() if isinstance(eval(var), pd.core.frame.DataFrame)]

# creates a list of dataframes
df_list = [eval(var) for var in dir() if isinstance(eval(var), pd.core.frame.DataFrame)]

# creates a dict of dataframes
df_dict = {f'{var}': eval(var) for var in dir() if isinstance(eval(var), pd.core.frame.DataFrame)}

# test function
def test(v: pd.DataFrame):
    print(v.info())


# function call with list of dataframes
for var in df_list:
    test(var)

# function call with dict of dataframes
for k, v in df_dict.items():
    test(v)

使用你的循环

  • 必须评估字符串名称才能将其转换为 pandas 数据框对象。
variable=['v1', 'v2', 'v3', 'v11', 'v12', 'v13']

for var in variables:
    function(eval(f'data_{var}'))

推荐阅读