如何从从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/max
和 axis = 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文件派生的大量字典中的值列表中查找最小值和最大值的主要内容,如果未能解决你的问题,请参考以下文章