Python 在循环中指定变量名和数据

Python 在循环中指定变量名和数据,python,pandas,Python,Pandas,我正在尝试用Python将数据加载到数据集中。我的数据是按年份排列的。我想在循环中分配变量名。以下是它在伪代码中的外观: import pandas as pd for i in range(2010,2017): Data+i = pd.read_csv("Data_from_" +str(i) + ".csv") # Stores data from file "Data_from_YYYY.csv" as dataset DataYYYY. 结果数据集将是Data2010

我正在尝试用Python将数据加载到数据集中。我的数据是按年份排列的。我想在循环中分配变量名。以下是它在伪代码中的外观:

import pandas as pd
for i in range(2010,2017):
    Data+i = pd.read_csv("Data_from_" +str(i) + ".csv")
    # Stores data from file "Data_from_YYYY.csv" as dataset DataYYYY.

结果数据集将是
Data2010
-
Data2017

虽然这是可能的,这不是一个好主意。具有动态生成的变量名的代码很难读取和维护。也就是说,您可以使用
exec
函数来执行,该函数从字符串执行代码。这将允许您使用字符串连接动态构造变量名

然而,你真的应该用字典来代替。这将为您提供一个具有动态命名键的对象,它更适合您的用途。例如:

import pandas as pd
Data = {}
for i in range(2010,2017):
    Data[i] = pd.read_csv("Data_from_" +str(i) + ".csv")
    # Stores data from file "Data_from_YYYY.csv" as dataset DataYYYY.

# Access data like this:
Data[2011]
在Python中,变量名也应该使用snake_大小写,因此
Data
应该是
Data

如果你真的想动态生成变量,你可以这样做。(但你不会的,对吧?)


您也可以在不使用
exec
的情况下执行此操作;看看Jooks的答案。

虽然这是可能的,但这不是一个好主意。具有动态生成的变量名的代码很难读取和维护。也就是说,您可以使用
exec
函数来执行,该函数从字符串执行代码。这将允许您使用字符串连接动态构造变量名

然而,你真的应该用字典来代替。这将为您提供一个具有动态命名键的对象,它更适合您的用途。例如:

import pandas as pd
Data = {}
for i in range(2010,2017):
    Data[i] = pd.read_csv("Data_from_" +str(i) + ".csv")
    # Stores data from file "Data_from_YYYY.csv" as dataset DataYYYY.

# Access data like this:
Data[2011]
在Python中,变量名也应该使用snake_大小写,因此
Data
应该是
Data

如果你真的想动态生成变量,你可以这样做。(但你不会的,对吧?)


您也可以在不使用
exec
的情况下执行此操作;看看Jooks的答案。

您可以使用
全局变量
局部变量
初始化
,它使用
self
上的
setattr
将变量分配给实例

In [1]: globals()['data' + 'a'] = 'n'

In [2]: print dataa
n



我可能会走第三条路。您可能会以一种非常规的方式处理您的解决方案,因为这种模式并不十分熟悉,即使是可能的。

您可以使用
全局变量
局部变量
初始化
,它使用
self
上的
setattr
将变量分配给实例

In [1]: globals()['data' + 'a'] = 'n'

In [2]: print dataa
n



我可能会走第三条路。您可能会以一种非常规的方式处理您的解决方案,因为这种模式并不十分熟悉,即使它是可能的。

您不能。至少,你绝对不应该(使用
exec
是危险的)。字典有什么问题
data={};对于范围内的i(2010年、2017年):data[i]=pd.read_csv(“data_from_”+str(i)+“.csv”)
?有一些标准方法不会像
exec
那样有风险,请参阅我的答案。非常感谢,使用字典非常有效。你不能。至少,你绝对不应该(使用
exec
是危险的)。字典有什么问题
data={};对于范围内的i(2010年,2017年):data[i]=pd.read_csv(“data_from_”+str(i)+“.csv”)
?有一些标准的方法不会像
exec
那样有风险,请参见我的答案。非常感谢,使用字典非常有效。动态生成变量名的代码很难读取和维护。这一点说得太大声了。也就是说:python使用的是
snake\u case
,而不是
camelCase
@jooks哇,我要改变我的答案。最近做得更多了@AaronChristiansen以前从未见过
exec()
。凉的另外,带有动态生成变量的代码听起来像是一把猎枪。带有动态生成变量名的代码很难读取和维护。这一点说得太大声了。也就是说:python使用的是
snake\u case
,而不是
camelCase
@jooks哇,我要改变我的答案。最近做得更多了@AaronChristiansen以前从未见过
exec()
。凉的另外,带有动态生成变量的代码听起来像是一把猎枪。
In [5]: class Data(object):
   ...:     def __init__(self, **kwargs):
   ...:         for k, v in kwargs.items():
   ...:             setattr(self, k, v)
   ...:

In [6]: my_data = Data(a=1, b=2)

In [7]: my_data.a
Out[7]: 1