Python 在循环中指定变量名和数据
我正在尝试用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
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