繁体   English   中英

如何在 Python 中使用变量名作为字符串

[英]How to use a variable name as string in Python

在 Python 中,我创建了一堆数据框,如下所示:

df1 = pd.read_csv("1.csv")
...
df50 = pd.read_csv("50.csv") # import modes may vary based on the csv, no real way to shorten this

对于每个 dataframe,我想执行一个需要分配一个字符串作为名称的操作。 例如,给定一个现有的数据库db

df1.to_sql("df1", db) # and so on. 

数据框的名称可能不连续,所以我不能for i in range(1,51): "df"+str(i)

我正在寻找正确的方法来做到这一点,而不是重复 50 次。 我的想法是

for df in [df1, df2... df50]: 
    df.to_sql(df.__name__, db) # but dataframes don't have a __name__
  1. 如何从我称为df1的 dataframe 中获取字符串"df1"
  2. 有没有更好的方法来完成这一切?

如果您真的想访问该名称,请参阅此答案,但一般而言,如链接答案中所述,您可能不应该这样做。

由于名称似乎首先是按照某种模式创建的,因此只需使用代码来复制该模式:

for i, df in enumerate([df1, df2... df50]):
    df.to_sql(f'df{i}', db)

(更好的是,首先不要有这些变量;直接创建列表。)

数据帧可能有一个不连续的名称,所以我不能为范围内的 i 做(1,51):“df”+str(i)。

哦。 那么在这种情况下,如果你想将文本名称与不遵循模式的对象相关联,这就是dict的用途:

dfs = {
    "df1": pd.read_csv("1.csv"),
    # whichever other names and values make sense
}

您可以轻松地对其进行迭代:

for name, df in dfs.items():
    df.to_sql(name, db)

如果存在将输入文件名与应该用于to_sql调用的文件名相关联的逻辑规则,则可以使用字典推导来构建字典:

dfs = {to_sql_name(csv_name): pd.read_csv(csv_name) for csv_name in ...}

或者在同一个循环中进行加载和处理:

for csv_name in ...:
    pd.read_csv(csv_name).to_sql(to_sql_name(csv_name), db)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM