如何从从excel文件派生的大量字典中的值列表中查找最小值和最大值

Posted

技术标签:

【中文标题】如何从从excel文件派生的大量字典中的值列表中查找最小值和最大值【英文标题】:How to find min and max values from list of values in large set of dictionary derived from excel file 【发布时间】:2021-08-18 02:46:50 【问题描述】:

我是使用 Python 处理字典和 Pandas 的新手。我有一个 excel 文件,其中包含名为 sensor 和 values 的列,传感器也可以重复,但它们的值可能不同。我将它们转换为字典,将重复的传感器与其值合并。现在,我有一个字典,其中包含传感器及其值作为列表(下面给出示例)。我想从它们的值列表中返回所有具有最低和最高值的键。值也可以重复。

'Sensor1': [0.427, 0.13, 0.129, 0.124], 'sensor2': [2.376, 2.376, 0.712, 0.618.208, 0.133], 'sensor3': [0.21, 0.139], 'sensor4': [0.237, 0.123], 'sensor5': [0.997, 0.806, 6.78]

我希望输出是

sensor1 0.124 0.427
sensor2 0.133 2.376
sensor3 0.139 0.21
.
.
.

我尝试过的代码只给了我第一组键值对,即

senor1 0.124 0.427

代码-

df = pd.read_excel("sensor.xlsx")
a=df.set_index('sensor')['values'].to_dict()
b=k: g["values"].to_list() for k,g in df.groupby("sensor")
for k,v in b.items():
    _max, _min = max(v), min(v)
    print(k, " ", _min, " ",  _max)

我的 excel 文件很大,此代码不适用于该文件。请帮忙,在此先感谢!

【问题讨论】:

所以您是说b.items() 只返回一个键值对,还是还有其他问题?你的问题不是很清楚。 @MarkRansom 嗨,我稍微编辑了这个问题。是的,b.items() 返回一个键值对。 【参考方案1】:

如果您已经有了字典,那么您可以将数据加载到数据框中并评估 min/maxaxis = 1

data = 'Sensor1': [0.427, 0.13, 0.129, 0.124], 'sensor2': [2.376, 2.376, 0.712, 0.618208, 0.133], 'sensor3': [0.21, 0.139], 'sensor4': [0.237, 0.123], 'sensor5': [0.997, 0.806, 6.78]

df = pd.DataFrame.from_dict(data, orient='index') 
df = pd.concat([df.min(1) , df.max(1)], axis =1)

或者你可以使用:

df = df.agg(['min', 'max'], axis='columns')  # suggested by @Cyttorak 

输出

            0      1
Sensor1  0.124  0.427
sensor2  0.133  2.376
sensor3  0.139  0.210
sensor4  0.123  0.237
sensor5  0.806  6.780

如果要将上述输出转换回dict

result = df.T.to_dict('list')

【讨论】:

df.agg(['min', 'max'], axis='columns')

以上是关于如何从从excel文件派生的大量字典中的值列表中查找最小值和最大值的主要内容,如果未能解决你的问题,请参考以下文章

我可以在 python3 中从 excel 文件(不是 CSV)创建字典吗?

Python 如何读取excel中的字典数据

将列表中的值导出到excel

我们如何访问以列表形式存在的字典中的值? [复制]

如何将嵌套字典列表与它们的值中的公共键相加? [复制]

使用列表中的项目更改嵌套字典的字典中的值?