[英]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__
df1
的 dataframe 中获取字符串"df1"
?如果您真的想访问该名称,请参阅此答案,但一般而言,如链接答案中所述,您可能不应该这样做。
由于名称似乎首先是按照某种模式创建的,因此只需使用代码来复制该模式:
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.