python中使用数字的变量名

python中使用数字的变量名,python,pandas,Python,Pandas,我正在寻找一种方法来压缩存储在变量中的数字,并在python中将其用作变量名(或作为字符串插入)。大概是这样的: for NUMBER in range(2000,2020,1): df_NUMBER = pd.read_csv('data_NUMBER.csv') df_NUMBER['year'] = NUMBER 可能吗? 在斯塔塔,情况如下: forvalues NUMBER = 2000(1)2019 { import delimited using dat

我正在寻找一种方法来压缩存储在变量中的数字,并在python中将其用作变量名(或作为字符串插入)。大概是这样的:

for NUMBER in range(2000,2020,1):
    df_NUMBER = pd.read_csv('data_NUMBER.csv')
    df_NUMBER['year'] = NUMBER 
可能吗? 在斯塔塔,情况如下:

forvalues NUMBER = 2000(1)2019 {
    import delimited using data_`NUMBER'.csv
    generate year = `NUMBER'
}

不要尝试动态创建变量名,这是一个非常糟糕的主意。而是将数据帧存储在一个集合中。在这种情况下,词典可能是有意义的。否则,只需一个长格式数据框,这将使分析更容易:

备选案文1:

dfs={}
对于范围内的年份(2000年、2020年):
dfs[year]=pd.read_csv(f“data_{year}.csv”)
dfs[年][“年”]=年
备选案文2:

dfs = []
for year in range(2000, 2020):
    df = pd.read_csv(f"data_{year}.csv")
    df["year"] = year
    dfs.append(df)
df_all = pd.concat(dfs).reset_index(drop=True)

在这种情况下,您可能需要选项2,因为您可以使用
.groupby(“年”)
对所有年份同时执行分析。不要尝试动态创建变量名,这是一个非常糟糕的主意。而是将数据帧存储在一个集合中。在这种情况下,词典可能是有意义的。否则,只需一个长格式数据框,这将使分析更容易:

备选案文1:

dfs={}
对于范围内的年份(2000年、2020年):
dfs[year]=pd.read_csv(f“data_{year}.csv”)
dfs[年][“年”]=年
备选案文2:

dfs = []
for year in range(2000, 2020):
    df = pd.read_csv(f"data_{year}.csv")
    df["year"] = year
    dfs.append(df)
df_all = pd.concat(dfs).reset_index(drop=True)

在这种情况下,您可能需要选项2,因为您可以使用
.groupby(“年”)
一次对所有年份执行分析。我建议使用字典方法:

df = {}
for year in range(2000,2020):
    filename =  'data_{}.csv'.format(year)
    df[year] = pd.read_csv(filename)
    df[year]['year'] = year

我建议用字典的方式:

df = {}
for year in range(2000,2020):
    filename =  'data_{}.csv'.format(year)
    df[year] = pd.read_csv(filename)
    df[year]['year'] = year

从技术上讲,这是可以做到的(以一种非常复杂的方式),但仅仅使用字典有什么错?!您是否在询问如何动态生成变量名?这是一个非常糟糕的主意。您能否展示您的预期输出,并解释为什么要这样做?或者,您正在询问如何创建一个字符串,其中的数字不断变化,以便引用不同的文件名?如果是后者,那么字符串插值就很简单了。这能回答你的问题吗?不要动态创建变量。你只能在全局范围内,而不能在局部范围内,这几乎肯定是一个糟糕的设计决策!以下是您在循环中使用的内容:
exec(“df\u%d=pd.read\u csv(\'data\u%d.csv\')”)“%(NUMBER,NUMBER))
从技术上讲,这是可以做到的(非常复杂的方式),但仅仅使用字典有什么错呢?!您是否在询问如何动态生成变量名?这是一个非常糟糕的主意。您能否展示您的预期输出,并解释为什么要这样做?或者,您正在询问如何创建一个字符串,其中的数字不断变化,以便引用不同的文件名?如果是后者,那么字符串插值就很简单了。这能回答你的问题吗?不要动态创建变量。你只能在全局范围内,而不能在局部范围内,这几乎肯定是一个糟糕的设计决策!以下是您在循环中输入的内容:
exec(“df\u%d=pd.read\u csv(\'data\u%d.csv\)”%(NUMBER,NUMBER))
range(20002020,1)
中,您不需要最后一个参数,因为默认步骤已经是1。对,我只是从OP的问题中复制粘贴。在
range(20002020,1)
中,您不需要最后一个参数,因为默认步骤已经是1。对,我只是从OP的问题复制粘贴。