开发者社区 问答 正文

有没有更好的方法来处理这类数据?

在我的项目中,我必须处理形状异常的数据,我认为这不是一种有效的处理方法。这是以下: 对于一个条目,您指定一个延迟值和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

展开
收起
kun坤 2019-12-28 13:43:11 376 分享 版权
阿里云 AI 助理回答

在处理这种形状不规则且具有可选值的数据时,可以考虑使用字典或Pandas的DataFrame来提高数据管理的效率和清晰度。这两种数据结构都能很好地适应键值对关系,并且便于动态添加、删除以及查询操作。

使用Python字典

字典允许你以键值对的形式存储数据,其中延迟作为键,对应的omega值列表作为值。这样,你可以直接通过延迟查找其对应的omega值,而且不需要预先设定大小,非常适合你的场景。

data = {}
data[10] = [1, 2, 3, 4]
data[20] = [1.1, 2.2, 3.3, None]
# ...继续添加或修改

使用Pandas DataFrame

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来改进当前的数据处理方式。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: