Pandas 屏蔽数据帧分配2D数组

Pandas 屏蔽数据帧分配2D数组,pandas,numpy,mask,Pandas,Numpy,Mask,我试图用数据帧和屏蔽数组来解决一个谜题 上下文 我正在尝试一些方法来帮助我学习一些机器学习的东西。我的目标是从一个简单的数据框架中添加新信息。我希望这些函数简单易用 问题 这是一个我称之为模型的函数,可以从数据进行转换。然后,我想在新列或现有列上设置这些新数据。我没有使用apply函数,因为如果我使用它,我将失去使用parrallism一次提取多个数据的能力(这就是为什么我先提取然后再应用“特征”) 这是一个谜,我想使用一个掩码,因为没有这个掩码,我无法修改原始数据帧。如果删除这个掩码,如果数据

我试图用数据帧和屏蔽数组来解决一个谜题

上下文 我正在尝试一些方法来帮助我学习一些机器学习的东西。我的目标是从一个简单的数据框架中添加新信息。我希望这些函数简单易用

问题 这是一个我称之为模型的函数,可以从数据进行转换。然后,我想在新列或现有列上设置这些新数据。我没有使用apply函数,因为如果我使用它,我将失去使用parrallism一次提取多个数据的能力(这就是为什么我先提取然后再应用“特征”)

这是一个谜,我想使用一个掩码,因为没有这个掩码,我无法修改原始数据帧。如果删除这个掩码,如果数据帧和功能具有相同的行数,一切都很好。现在,如果我添加这个掩码,它似乎是一行接一行的,并且维度不匹配。。。。 编辑:我忘了告诉你“特征”对应于2d numpy数组

错误

ValueError:使用ndarray设置时,必须具有相等的len键和值

代码

def transform(dataframe, tags, out, model, mask=None):
    # Check mandatory fields
    mandatory = ['datum']
    if not isinstance(tags, dict) or not all(elem in mandatory for elem in tags.keys()):
        raise Exception(f'Not a dict or missing tag: {mandatory}.')

    # Mask creation (see pandas view / copy mechanism)
    if mask is None:
        mask = [True] * len(dataframe.index)

    features = model.transform(dataframe.loc[mask, tags['datum']].to_numpy())
    dataframe.loc[mask, out] = features.tolist()
    return dataframe
示例 数据可以是这样的:

行;数据;标签

0;[61953.017837947686,9.505037089204054,74.585…];0

[80832.69302693632,9.524642547991316,83.9228…];1

模型可以是sklearn的PCA。 方法可以是这样的:

transform(dataframe, {'datum': 'Data'}, 'PCA', PCA(), mask=dataframe[dataframe['Label']==1)
那么输出将是:

行;数据;标签;主成分分析

0;[61953.017837947686,9.505037089204054,74.585…];0;[74.585…]

1;[80832.69302693632,9.524642547991316,83.9228…];1;[92.578…]

当前解决方案

mask = inputs[condition]
inputs['PCA'] = np.nan
inputs[mask] = Classification.transform(inputs[mask], {'datum': 'Data'}, wavelet, 'PCA')

def transform(dataframe, tags, model, out):
    # Check mandatory fields
    mandatory = ['datum']
    if not isinstance(tags, dict) or not all(elem in mandatory for elem in tags.keys()):
        raise Exception(f'Not a dict or missing tag: {mandatory}.')

    features = model.transform(dataframe[tags['datum']].to_numpy())
    dataframe[out] = features.tolist()
    return dataframe
谢谢你的回答!
致以最诚挚的问候

好的,我找到了一个适合我需要的解决方案。 第二个想法在我看来是个坏主意,因为要将视图作为参数传递并用一种方便的方式编辑它似乎并不容易

因此,我改变我的第一个主张。以下是最终版本:

def transform(dataframe, tags, model, out, mask=None):
    # Check mandatory fields
    mandatory = ['datum']
    if not isinstance(tags, dict) or not all(elem in mandatory for elem in tags.keys()):
        raise Exception(f'Not a dict or missing tag: {mandatory}.')

    # Mask creation (see pandas view / copy mechanism)
    if mask is None:
        mask = [True] * len(dataframe.index)

    # dataframe[out] = np.nan
    features = model.transform(dataframe.loc[mask, tags['datum']].to_numpy())
    dataframe.loc[mask, out] = pd.Series(features.tolist())
    return dataframe
我没有做dataframe.loc[mask,out]=features.tolist(),而是切换到:dataframe.loc[mask,out]=pd.Series(features.tolist())。通过查看一个系列,它完全适合


感谢Ken Syme参与我的问题。

好的,所以我找到了适合我需要的解决方案。 第二个想法在我看来是个坏主意,因为要将视图作为参数传递并用一种方便的方式编辑它似乎并不容易

因此,我改变我的第一个主张。以下是最终版本:

def transform(dataframe, tags, model, out, mask=None):
    # Check mandatory fields
    mandatory = ['datum']
    if not isinstance(tags, dict) or not all(elem in mandatory for elem in tags.keys()):
        raise Exception(f'Not a dict or missing tag: {mandatory}.')

    # Mask creation (see pandas view / copy mechanism)
    if mask is None:
        mask = [True] * len(dataframe.index)

    # dataframe[out] = np.nan
    features = model.transform(dataframe.loc[mask, tags['datum']].to_numpy())
    dataframe.loc[mask, out] = pd.Series(features.tolist())
    return dataframe
我没有做dataframe.loc[mask,out]=features.tolist(),而是切换到:dataframe.loc[mask,out]=pd.Series(features.tolist())。通过查看一个系列,它完全适合


感谢Ken Syme参与我的问题。

通过显示您将要进行的转换类型的真实示例,并根据您的要求更新输入数据和预期输出,从而获得更多关于您正在尝试执行的操作的示例,这将非常好;)您可以尝试
dataframe.loc[mask,[out]=features.tolist()
(注意额外的方括号)?如果这不起作用,打印
特性.shape
会很有帮助。出于兴趣,后续使用它的目的是什么?好奇是否有更好的方法让您到达需要的位置,感谢您的反应!对于
dataframe.loc[mask,[Out]=features.tolist()也是如此
,对于你的第二个问题,
功能,
的[Index(['PCA'],dtype='object')]没有一个在[columns]中数据框有600行。对于你的最后一个问题,我的主要目的是制作一个工具库,以最易读的方式在jupyter笔记本中使用它,以实现一些关于分类的研究。我添加了一个解决方案,它并不是我现在所需要的……如果能得到更多关于sho在这里尝试做什么的示例,那将是非常棒的举一个你将要进行的转换类型的真实例子,输入数据和预期输出会根据你的要求进行更新;)你能试试
dataframe.loc[mask[out]]=features.tolist()
(注意额外的方括号)吗?如果这不起作用,那么打印
features.shape
是什么会很有帮助。出于兴趣,用户随后使用此功能的目的是什么?好奇是否有更好的方法让你到达你需要的地方,谢谢你的回应!因此,对于
dataframe.loc[mask[out]]=features.tolist()
,我得到了“没有[Index(['PCA'],dtype='object')]在[columns]中。”对于第二个问题,
features.shape
的维度为(600,12),数据框有600行。对于你的最后一个问题,我的主要目的是制作一个工具库,以最易读的方式在jupyter笔记本中使用它,以实现一些关于分类的研究。我添加了一个解决方案,它实际上并不符合我现在的需要。。。