循环遍历Pandas DataFrame行,创建唯一命名的数组
解决动态生成对应名称空数组的问题
你伪代码里第6行的问题在于:你先将TotalName赋值为一个字符串(比如Loc152689_005263),紧接着又把它重新赋值为空列表——这只是修改了TotalName这个变量本身的值,并没有创建一个以该字符串为名称的新数组变量。
下面是两种可行的解决方法:
推荐方案:用字典统一存储数组
用字典管理动态生成的数组是最规范的做法,既能避免污染全局命名空间,也方便后续的遍历、查找和维护:
import pandas as pd import numpy as np # 注意:原代码中`005263`会被Python解析为八进制数(实际值为5263),如果要保留前导零,ColB应使用字符串类型 d = {'ColA':[152689, 221330, 245521], 'ColB':['005263', '135255', '102120'], 'ColC':[132565, 187514, 414141]} Sample = pd.DataFrame(data=d) # 初始化字典用于存储所有空数组 arrays_store = {} # 遍历DataFrame的每一行 for _, row in Sample.iterrows(): # 按规则生成数组名称 array_name = f'Loc{row["ColA"]}_{row["ColB"]}' # 将空数组存入字典 arrays_store[array_name] = [] # 调用示例:通过字典键访问对应数组 print(arrays_store['Loc152689_005263']) # 输出:[]
如果ColB必须使用整数类型,又要保留前导零,可以用str(row["ColB"]).zfill(6)补全为6位字符串:
array_name = f'Loc{row["ColA"]}_{str(row["ColB"]).zfill(6)}'
不推荐方案:动态创建全局变量
虽然可以通过globals()函数直接在全局命名空间创建变量,但这种方式容易引发命名冲突,不利于代码调试和维护,仅作了解:
import pandas as pd import numpy as np d = {'ColA':[152689, 221330, 245521], 'ColB':['005263', '135255', '102120'], 'ColC':[132565, 187514, 414141]} Sample = pd.DataFrame(data=d) for _, row in Sample.iterrows(): array_name = f'Loc{row["ColA"]}_{row["ColB"]}' # 动态创建全局变量 globals()[array_name] = [] # 直接通过变量名访问 print(Loc152689_005263) # 输出:[]
内容的提问来源于stack exchange,提问作者Erika H.
相关产品推荐
相关产品推荐

