如何在Python中提取数据集列表中X、Y、Z的值?

2024-05-16 21:57:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到了一组数据集,如下所示

如何在Python中提取每个系列的X、Y、Z值

实际上,我以后需要计算每个系列的标准偏差。(x、y、z标准偏差)

{'deviceTimestamp': 166230, 'x': 3.5538, 'y': -9.7006, 'z': 3.3077}, {'deviceTimestamp': 166250, 'x': -1.4629, 'y': -7.0692, 'z': 2.2308}, {'deviceTimestamp': 166260, 'x': -6.7571, 'y': -5.0299, 'z': -0.076923}, {'deviceTimestamp': 166280, 'x': -5.0319, 'y': -6.5896, 'z': -0.076923}, {'deviceTimestamp': 166300, 'x': -0.21122, 'y': -8.9002, 'z': 2.5}, {'deviceTimestamp': 166320, 'x': 6.3477, 'y': -9.3142, 'z': 4.5385}, {'deviceTimestamp': 166340, 'x': 10.904, 'y': -9.9498, 'z': 5.6538}, {'deviceTimestamp': 166360, 'x': 9.5501, 'y': -8.5014, 'z': 5.6923}, {'deviceTimestamp': 166380, 'x': 7.7312, 'y': -8.5973, 'z': 5.6154}, {'deviceTimestamp': 166400, 'x': 8.9783, 'y': -10.132, 'z': 4.7692}, {'deviceTimestamp': 166420, 'x': 9.8307, 'y': -11.159, 'z': 5.0385}, {'deviceTimestamp': 166440, 'x': 7.7934, 'y': -10.556, 'z': 5.8077}, {'deviceTimestamp': 166460, 'x': 5.8261, 'y': -10.259, 'z': 2.8462}, {'deviceTimestamp': 166480, 'x': 4.4837, 'y': -10.092, 'z': 1.6538}, {'deviceTimestamp': 166500, 'x': 5.5556, 'y': -11.08, 'z': 1.8462}, {'deviceTimestamp': 166520, 'x': 8.4009, 'y': -12.06, 'z': 1.0}

Tags: 数据标准偏差devicetimestamp
3条回答

你当然可以像其他人所展示的那样在理解中使用这些键。但是,当有多个键时,我喜欢^{}的功能风格和简洁性。您可以创建一个列表或使用map(或两者都使用)。例如:

from operator import itemgetter

data = [{'deviceTimestamp': 166230, 'x': 3.5538, 'y': -9.7006, 'z': 3.3077}, {'deviceTimestamp': 166250, 'x': -1.4629, 'y': -7.0692, 'z': 2.2308}, {'deviceTimestamp': 166260, 'x': -6.7571, 'y': -5.0299, 'z': -0.076923}, {'deviceTimestamp': 166280, 'x': -5.0319, 'y': -6.5896, 'z': -0.076923}, {'deviceTimestamp': 166300, 'x': -0.21122, 'y': -8.9002, 'z': 2.5}, {'deviceTimestamp': 166320, 'x': 6.3477, 'y': -9.3142, 'z': 4.5385}, {'deviceTimestamp': 166340, 'x': 10.904, 'y': -9.9498, 'z': 5.6538}, {'deviceTimestamp': 166360, 'x': 9.5501, 'y': -8.5014, 'z': 5.6923}, {'deviceTimestamp': 166380, 'x': 7.7312, 'y': -8.5973, 'z': 5.6154}, {'deviceTimestamp': 166400, 'x': 8.9783, 'y': -10.132, 'z': 4.7692}, {'deviceTimestamp': 166420, 'x': 9.8307, 'y': -11.159, 'z': 5.0385}, {'deviceTimestamp': 166440, 'x': 7.7934, 'y': -10.556, 'z': 5.8077}, {'deviceTimestamp': 166460, 'x': 5.8261, 'y': -10.259, 'z': 2.8462}, {'deviceTimestamp': 166480, 'x': 4.4837, 'y': -10.092, 'z': 1.6538}, {'deviceTimestamp': 166500, 'x': 5.5556, 'y': -11.08, 'z': 1.8462}, {'deviceTimestamp': 166520, 'x': 8.4009, 'y': -12.06, 'z': 1.0}]

# coords is an iterator
coord = map(itemgetter('x','y','z'), data)

# you can make a list if you want
list(coord)

# or loop over the values without making a list:
coord = map(itemgetter('x','y','z'), data)  
for x, y, z in coord:
    print(x,y,z)

假设您使用的是python 3

data = {'deviceTimestamp': 166230, 'x': 3.5538, 'y': -9.7006, 'z': 3.3077}, {'deviceTimestamp': 166250, 'x': -1.4629, 'y': -7.0692, 'z': 2.2308}, {'deviceTimestamp': 166260, 'x': -6.7571, 'y': -5.0299, 'z': -0.076923}, {'deviceTimestamp': 166280, 'x': -5.0319, 'y': -6.5896, 'z': -0.076923}, {'deviceTimestamp': 166300, 'x': -0.21122, 'y': -8.9002, 'z': 2.5}, {'deviceTimestamp': 166320, 'x': 6.3477, 'y': -9.3142, 'z': 4.5385}, {'deviceTimestamp': 166340, 'x': 10.904, 'y': -9.9498, 'z': 5.6538}, {'deviceTimestamp': 166360, 'x': 9.5501, 'y': -8.5014, 'z': 5.6923}, {'deviceTimestamp': 166380, 'x': 7.7312, 'y': -8.5973, 'z': 5.6154}, {'deviceTimestamp': 166400, 'x': 8.9783, 'y': -10.132, 'z': 4.7692}, {'deviceTimestamp': 166420, 'x': 9.8307, 'y': -11.159, 'z': 5.0385}, {'deviceTimestamp': 166440, 'x': 7.7934, 'y': -10.556, 'z': 5.8077}, {'deviceTimestamp': 166460, 'x': 5.8261, 'y': -10.259, 'z': 2.8462}, {'deviceTimestamp': 166480, 'x': 4.4837, 'y': -10.092, 'z': 1.6538}, {'deviceTimestamp': 166500, 'x': 5.5556, 'y': -11.08, 'z': 1.8462}, {'deviceTimestamp': 166520, 'x': 8.4009, 'y': -12.06, 'z': 1.0}

for item in data:
    print(item[x])
    print(item[y])
    print(item[z])

您可以使用列表理解来构造具有x、y、z的列表

data = [
    {'deviceTimestamp': 166230, 'x': 3.5538, 'y': -9.7006, 'z': 3.3077}, 
    {'deviceTimestamp': 166250, 'x': -1.4629, 'y': -7.0692, 'z': 2.2308}, 
    {'deviceTimestamp': 166260, 'x': -6.7571, 'y': -5.0299, 'z': -0.076923}, 
    {'deviceTimestamp': 166280, 'x': -5.0319, 'y': -6.5896, 'z': -0.076923}, 
    {'deviceTimestamp': 166300, 'x': -0.21122, 'y': -8.9002, 'z': 2.5}, 
    {'deviceTimestamp': 166320, 'x': 6.3477, 'y': -9.3142, 'z': 4.5385}, 
    {'deviceTimestamp': 166340, 'x': 10.904, 'y': -9.9498, 'z': 5.6538}, 
    {'deviceTimestamp': 166360, 'x': 9.5501, 'y': -8.5014, 'z': 5.6923},
    {'deviceTimestamp': 166380, 'x': 7.7312, 'y': -8.5973, 'z': 5.6154}, 
    {'deviceTimestamp': 166400, 'x': 8.9783, 'y': -10.132, 'z': 4.7692}, 
    {'deviceTimestamp': 166420, 'x': 9.8307, 'y': -11.159, 'z': 5.0385}, 
    {'deviceTimestamp': 166440, 'x': 7.7934, 'y': -10.556, 'z': 5.8077}, 
    {'deviceTimestamp': 166460, 'x': 5.8261, 'y': -10.259, 'z': 2.8462}, 
    {'deviceTimestamp': 166480, 'x': 4.4837, 'y': -10.092, 'z': 1.6538}, 
    {'deviceTimestamp': 166500, 'x': 5.5556, 'y': -11.08, 'z': 1.8462}, 
    {'deviceTimestamp': 166520, 'x': 8.4009, 'y': -12.06, 'z': 1.0}
]

coordinates = [[d['x'], d['y'], d['z']] for d in data]

那么coordinates列表是:

[[3.5538, -9.7006, 3.3077],
 [-1.4629, -7.0692, 2.2308],
 [-6.7571, -5.0299, -0.076923],
 [-5.0319, -6.5896, -0.076923],
 [-0.21122, -8.9002, 2.5],
 [6.3477, -9.3142, 4.5385],
 [10.904, -9.9498, 5.6538],
 [9.5501, -8.5014, 5.6923],
 [7.7312, -8.5973, 5.6154],
 [8.9783, -10.132, 4.7692],
 [9.8307, -11.159, 5.0385],
 [7.7934, -10.556, 5.8077],
 [5.8261, -10.259, 2.8462],
 [4.4837, -10.092, 1.6538],
 [5.5556, -11.08, 1.8462],
 [8.4009, -12.06, 1.0]]

要获得标准偏差,可以使用numpy或编写自己的函数

import numpy as np

# Population standard deviation per coordinate.
np.std(coordinates, axis=1)
# array([6.19099304, 3.82337866, 2.83117498, 2.77675246, 4.86271126,
#        6.99575755, 8.85637189, 7.76173229, 7.25026715, 8.19868452,
#        8.98079242, 8.22201761, 6.98694428, 6.31068919, 7.1304471 ,
#        8.45895548])

下面是一个使用标准库的类似函数

import math

def stdev(values):
    mean = sum(values) / len(values)
    numerator = sum((x - mean) ** 2 for x in values)
    denominator = len(values)
    return math.sqrt(numerator / denominator)

[stdev(c) for c in coordinates]

相关问题 更多 >