【问题标题】: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]]

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

【问题讨论】:

    标签: python pandas loops dataframe dictionary


    【解决方案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()
    猜你喜欢
    • 1970-01-01
    • 2012-12-28
    • 2020-11-12
    • 1970-01-01
    • 2021-09-28
    • 2016-09-15
    • 1970-01-01
    • 2022-01-04
    • 2020-05-18
    相关资源
    最近更新 更多