在我的项目中,我必须处理形状异常的数据,我认为这不是一种有效的处理方法。这是以下: 对于一个条目,您指定一个延迟值和1-4个omega值(一个是必需的,其他是可选的) 4个条目的一个例子:
delay = np.array([10,20,30,None])
omega = [[1, 2, 3, 4], [1.1, 2.2, 3.3, None], [1.4, 2.4, None, None], [None, None, None, None]]
然后,为了继续处理这些数据,我应用以下函数来转换为x-y图:
def transform_data(omegas, delays):
delays = delays[delays != np.array(None)]
omegas_ext = []
delays_exp = []
for delay, element in zip(delays, omegas):
item = [x for x in element if x is not None]
omegas_ext.extend(item)
delays_exp.extend(len(item) * [delay])
return np.array(delays_exp), np.array(omegas_ext)
它基本上是将延迟值与相应数组的值匹配起来,并将其中的零值丢弃。 输出:
(array([10, 10, 10, 10, 20, 20, 20, 30, 30]), array([1. , 2. , 3. , 4. , 1.1, 2.2, 3.3, 1.4, 2.4]))
它没有(不应该)预定义长度,因为它嵌入在PyQt5 GUI中, 在QTreeWidget中,用户可以添加/编辑/删除条目。 目前这种做法是可耻的:
self.omegas = [[None]]*30
self.delays = np.array([None]*30)
然后我添加或删除值,并忽略后面的Nones。 (这应该是一个像{delay: omega} ?) 对我来说,问题是omega的可选性:我找不到更好的存储相关值的方法。 因此,我的问题是:在这种情况下是否有更好的数据类型可用? 问题来源StackOverflow 地址:/questions/59381597/is-there-a-better-way-of-dealing-with-this-type-of-data
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在处理这种形状不规则且具有可选值的数据时,可以考虑使用字典或Pandas的DataFrame来提高数据管理的效率和清晰度。这两种数据结构都能很好地适应键值对关系,并且便于动态添加、删除以及查询操作。
字典允许你以键值对的形式存储数据,其中延迟作为键,对应的omega值列表作为值。这样,你可以直接通过延迟查找其对应的omega值,而且不需要预先设定大小,非常适合你的场景。
data = {}
data[10] = [1, 2, 3, 4]
data[20] = [1.1, 2.2, 3.3, None]
# ...继续添加或修改
Pandas DataFrame是处理表格型数据的强大工具,它提供了丰富的数据操作功能。对于你的需求,可以将delay
作为索引,每个omega
数组作为一列。缺失值(None)可以用NaN表示,这是Pandas中处理缺失数据的标准方式。
import pandas as pd
import numpy as np
# 初始化一个空的DataFrame,index为延迟,columns可以是动态生成的
df = pd.DataFrame(columns=range(1, 5), index=[])
# 添加数据
df.loc[10] = [1, 2, 3, 4]
df.loc[20] = [1.1, 2.2, 3.3, np.nan]
# ...继续添加或修改
# 若要转换为x-y格式进行绘图
def transform_data_df(df):
delays_exp = df.index.tolist()
omegas_ext = df.stack().dropna().tolist() # 将NaN去掉并展平列表
return delays_exp, omegas_ext
delays, omegas = transform_data_df(df)
使用Pandas的优势在于,你可以直接利用其内置函数进行数据清洗、筛选、转换等操作,而无需手动编写循环逻辑,这将使代码更加简洁且易于维护。
综上所述,根据你的具体需求和是否需要进一步数据分析,可以选择使用字典或者Pandas DataFrame来改进当前的数据处理方式。