使用字典和数据框通过循环创建具有变量名的新数组

Posted

技术标签:

【中文标题】使用字典和数据框通过循环创建具有变量名的新数组【英文标题】:Using dictionary and dataframe to create new arrays with variable names with loop 【发布时间】:2020-03-13 03:52:54 【问题描述】:

我目前正在处理一些作为具有 10000 行和 20 列的数据框导入 Python 的数据。这些列存储样品名称和化学元素。 daaaframe 当前按样本名称和时间进行索引,如下所示: [1]:https://i.stack.imgur.com/7knqD.png。

从这个数据框中,我想为每个单独的样本创建单独的数组,其中大约有 25 个,带有一个循环。我已经生成了样本名称的索引和数组,这会产生一个如下所示的数组

samplename = fuegodataframe.index.levels[0] samplearray = samplename.to_numpy()

array(['AC4-EUH41', 'AC4-EUH79N', 'AC4-EUH79S', 'AC4-EUH80', 'AC4-EUH81', 'AC4-EUH81b'、'AC4-EUH82N'、'AC4-EUH82W'、'AC4-EUH84'、 'AC4-EUH85N'、'AC4_EUH48'、'AC4_EUH48b'、'AC4_EUH54N'、 'AC4_EUH54S'、'AC4_EUH60'、'AC4_EUH72'、'AC4_EUH73'、'AC4_EUH73W'、 'AC4_EUH78'、'AC4_EUH79E'、'AC4_EUH79W'、'AC4_EUH88'、'AC4_EUH89'、 'bhvo-1'、'bhvo-2'、'bir-1'、'bir-2'、'gor132-1'、'gor132-2'、 'gor132-3', 'sc ol-1', 'sc ol-2'], dtype=object)

我还创建了一个字典,其中包含每个变量名称的键。我现在想知道如何使用该字典为每个样本生成单独的变量,以捕获找到样本的所有行。

我已经尝试了一些类似的方法:

for ii in sampledictionary.keys():
     if ii == sampledictionary[ii]: 
        sampledictionary[ii] = fuegodataframe.loc[sampledictionary[ii]]

但这失败了。我将如何真正去做这样的事情?这可能吗?

【问题讨论】:

【参考方案1】:

我认为您是在问如何动态生成变量,而不是将输出分配给字典中的键。

在 Python 中有一个全局函数globals(),它将输出文档中定义的所有变量名。

您可以将新变量动态分配给此字典

globals()[f'variablename_ii'] = fuegodataframe.loc[sampledictionary[ii]]

等等

如果ii0,那么variablename_0 将可用分配的值。

一般来说,这不是好的做法,但有时是必需的。

【讨论】:

聪明,有时很有用 globals() 是一个字典,因此可以添加到:>>> cheat Traceback(最近一次调用最后):文件“”,第 1 行,在 NameError: name ' cheat' 未定义 >>> type(globals())>>> globals()['cheat'] = 123 >>> cheat 123 ps 同样适用于 locals()

以上是关于使用字典和数据框通过循环创建具有变量名的新数组的主要内容,如果未能解决你的问题,请参考以下文章

将字典添加为数据框中的新行

获取具有两个变量和多个行名的 p 值

Swift - 1 (常量变量字符串数组字典元组循环枚举函数)

基于字典键创建具有值的新列

使用循环从 plist 的根级别获取字典数组并将其放入变量中

如果现有变量位于数据框中的两个值之间,则创建等于 1 的新变量