当前位置: 首页 > 知识库问答 >
问题:

熊猫。应用扩展列值错误:如果使用所有标量值,则必须传递索引

宦炜
2023-03-14

我想对数据帧应用一个函数,该数据帧为原始数据集中的每一列返回几列。apply函数返回包含列和索引的DataFrame,但仍会引发错误ValueError:如果使用所有标量值,则必须传递索引。

我试着设置输出数据帧的名称,将列设置为多索引,并将索引设置为多索引,但都不起作用。

示例:我有这个输入数据帧

df_all_users = pd.DataFrame(
    [[1, 2, 3],
     [1, 2, 3],
     [1, 2, 3],
    ],
    index=["2020-01-01", "2020-01-02", "2020-01-03"],
    columns=["user_1", "user_2", "user_3"])

          user_1  user_2    user_3
2020-01-01     1       2         3
2020-01-02     1       2         3
2020-01-03     1       2         3

apply_函数如下所示:

def apply_function(df):
    df_out = pd.DataFrame(index=df.index)
    # these columns are in reality computed used some other functions
    df_out["column_1"] = df.values  # example: pyod.ocsvm.OCSVM.fit_predict(df.values) 
    df_out["column_2"] = - df.values  # example: pyod.knn.KNN.fit_predict(df.values)
    
    # these are the things I've tried without working
    df_out.name = df.name
    df_out.columns = pd.MultiIndex.from_tuples([(df.name, column) for column in df_out.columns],
                                               names=["user", "score"])
    df_out.index = pd.MultiIndex.from_tuples([(df.name, idx) for idx in df_out.index],
                                             names=["user", "date"])
    print(df_out)
    return df_out

df_all_users.apply(apply_function, axis=0, result_type="expand")

这会引发错误:

ValueError:如果使用所有标量值,则必须传递索引

我期望的输出如下所示:

out_df = pd.DataFrame(
    [[1, 1, 2, 2, 3, 3],
     [1, 1, 2, 2, 3, 3],
     [1, 1, 2, 2, 3, 3],
    ],
    index=["2020-01-01", "2020-01-02", "2020-01-03"],
    columns=pd.MultiIndex.from_tuples([(user, column)
                                       for user in ["user_1", "user_2", "user_3"]
                                       for column in ["column_1", "column_2"]],
                                      names=("user", "score"))
)

             user_1           user_2            user_3
           column_1 column_2 column_1 column_2 column_1 column_2
2020-01-01        1        1        2        2        3        3
2020-01-02        1        1        2        2        3        3
2020-01-03        1        1        2        2        3        3

共有2个答案

邓欣可
2023-03-14

好的,答案是将输出转换为一系列数组,然后连接结果:

import pandas as pd
df_all_users = pd.DataFrame(
    [[1, 2, 3],
     [1, 2, 3],
     [1, 2, 3],
    ],
    index=["2020-01-01", "2020-01-02", "2020-01-03"],
    columns=["user_1", "user_2", "user_3"])

def apply_function(df):
    df_out = pd.DataFrame(index=df.index)
    df_out["column_1"] = df.values
    df_out["column_2"] = df.values

    df_out = pd.Series([values for values in df_out.values], index=df.index)
    df_out.name = df.name
    return df_out

df_out = df_all_users.groupby(level=0, axis=1).apply(apply_function)
df_out = pd.DataFrame([np.concatenate(values, axis=0) for values in df_out.values],
                      index=df_out.index,
                      columns=pd.MultiIndex.from_tuples([(user, column)
                                                         for column in ["column_1", "column_2"]
                                                         for user in df_out.columns
                                                        ], names=["user", "algorithm"]))
df_out



user          user_1                  user_2                  user_3
algorithm   column_1    column_2    column_1    column_2    column_1    column_2
2020-01-01         1           1           2           2           3           3
2020-01-02         1           1           2           2           3           3
2020-01-03         1           1           2           2           3           3
易超
2023-03-14

这样做:

import numpy as np

df_all_users[np.repeat(df_all_users.columns.values,2)]
 类似资料:
  • 我在导入带有熊猫的JSON文件时遇到了一些困难。 这是我得到的错误: 文件结构简化如下: 它来自Coursera上的华盛顿大学机器学习课程。你可以在这里找到文件。

  • 在我之前的问题之后,一切都很好,但是当列表很长的时候,它显示了这个错误,这是一个简单的d: 有人知道我怎么修吗?先谢谢你。 NB:我从这里的回答中尝试了几种解决方案,但它们对我不起作用

  • 问题内容: 我在导入带有熊猫的JSON文件时遇到一些困难。 这是我得到的错误: 文件结构是这样简化的: 它来自Coursera的华盛顿大学的机器学习课程。您可以在这里找到文件。 问题答案: 尝试 该文件仅包含键值为标量的键值对。您可以使用将其转换为数据框。 您还可以执行以下操作: 现在数据就是字典。您可以将其传递给数据框构造函数,如下所示:

  • 目前,我使用for循环从文件夹中读取csv文件。读取csv文件后,我将数据存储到字典的一行中。当我使用"print(list_of_dfs.dtypes)"打印数据类型时,我会收到: 数据类型:对象日期时间:对象值:float64 ID:int64 ID名称:对象。 请注意,这是一个嵌套字典,每个数据字段中存储了数千个值。我有上面列出的26行结构。我试图将字典行附加到一个数据框中,其中我将只有一行

  • 我在python上运行了以下代码,以便从一开始就检索各种加密货币收盘价。我已使用以下代码成功运行它: 现在,我将其更改如下(包括完整代码),并得到一个ValueError。 [LN1] [LN2] [LN3] [LN4] 我现在得到以下错误: --------------------------------------------------------------------------- Va

  • 我正在尝试使用python进行web抓取。当我试图创建一个数据帧来存储包含提取信息的变量时,它显示“ValueError:如果使用所有标量值,则必须传递索引”。我已经通过尝试索引查看了此网站中的其他相关帖子,但仍然无法解决此问题。请帮忙。