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

应用返回包含列表的元组的函数时出错

潘凯
2023-03-14

我正在将一个函数应用于一个数据框,并返回一个元组,以便使用zip(*)将其转换为多个数据框列。

返回的元组,包含一个列表,其中包含一个或多个元组

如果嵌套的列表中至少有一个包含与其余列表不同的元组计数,则一切正常。

在极少数情况下,函数返回所有嵌套的列表具有相等的元组计数,引发一个AssertionError:新值的形状必须与管理器形状兼容。

我怀疑熊猫看到了一致的嵌套list长度,并试图将list(元组)解压缩到单独的列中。

如何强制熊猫始终按原样存储返回的列表,而不考虑上述条件?

(Python 3.7.4,Pandas 1.0.3)

有效的代码:

import pandas as pd
import numpy as np

def simple_function(type_count):
    calculated_value1 = np.random.randint(5)
    calculated_value2 = np.random.randint(5)
    types_list = [tuple((x, calculated_value2)) for x in range(0, type_count)]
    return calculated_value1, types_list
    
df = pd.DataFrame([{'name': 'Joe', 'types': 1},
                   {'name': 'Beth', 'types': 1},
                   {'name': 'John', 'types': 1},
                   {'name': 'Jill', 'types': 2},
                   ], columns=['name', 'types'])

df['calculated_result'], df['types_list'] = zip(*df['types'].apply(simple_function))

引发断言错误的代码:新值的形状必须与管理器形状兼容

import pandas as pd
import numpy as np

def simple_function(type_count):
    calculated_value1 = np.random.randint(5)
    calculated_value2 = np.random.randint(5)
    types_list = [tuple((x, calculated_value2)) for x in range(0, type_count)]
    return calculated_value1, types_list
    
df = pd.DataFrame([{'name': 'Joe', 'types': 1},
                   {'name': 'Beth', 'types': 1},
                   {'name': 'John', 'types': 1},
                   {'name': 'Jill', 'types': 1},
                   ], columns=['name', 'types'])

df['calculated_result'], df['types_list'] = zip(*df['types'].apply(simple_function))

共有1个答案

昝涛
2023-03-14

通过从结果列表中创建DataFrame:

df[['calculated_result','types_list']] = pd.DataFrame(df['types'].apply(simple_function).tolist())

使用数组可以得到类似的结果

df['calculated_result'], df['types_list'] = np.array(df['types'].apply(simple_function).tolist()).T
 类似资料:
  • 问题内容: 以下是gcc 4.4.4下的简单代码段错误 将最后一行更改为 工作良好。使用编译时,这两个版本均可使用。我是在简单地调用未定义的行为,还是在标准中进行了某些更改,从而使代码可以在C99下工作?为什么在C89下崩溃? 问题答案: 我相信C89 / C90和C99中的行为均未定义。 是数组类型的表达式,特别是。 C99 6.3.2.1p3说: 除非它是 sizeof 运算符或一元 & 运算

  • 我有一个GeoPandas df: 看起来像: 如何将坐标列转换为LineString(无论元组列表中有多少个点)?例如。: 编辑:我试过(见Prateek的回答): 以及: 两者都返回以下错误: 属性错误回溯(上次调用)~/opt/anaconda3/lib/python3.8/site-packages/shapely/speedups//u speedups.pyx in shapely.s

  • 相对来说,我是一个与Java智能合约交互的新手,在尝试检索智能合约函数返回的tuple[]时遇到了一个问题。这是我想调用的函数的ABI定义: 以下是智能合约代码的链接:https://polygonscan . com/address/0x 920 f 22 E1 e 5 da 04504 b 765 f 8110 ab 96 a 20 e 6408 BD # code 下面是我编写的调用该函数的

  • 问题内容: 我正在尝试编写一个名为flatten_list的函数,该函数将可能嵌套的列表作为输入,并返回包含输入列表的所有元素的非嵌套列表。 我的代码: 此代码适用于带有字符串的列表,但不适用于整数值。如何更改代码,使其同时适用于两者? 谢谢 问题答案: 通常,这将以递归方式进行,例如: 这将可迭代的容器的任意组合(例如工作,,,(仅按键))和内容(例如,,),使用普通EAFP Python的风格

  • 我有一个类似这样的字符串枚举: 我有一个包含一些字符串的列表。 我想迭代someStringList并为它找到相应的枚举。 例如:列表包含字符串“一些值”和“一些第三个值”,然后我想使用JavaStream-API返回一个包含SomeEnum.STRING1和SomeEnum.STRING3的列表 不知何故,我无法让它工作。我尝试了这样的事情: 但这不会编译,因为它不会返回任何内容。有什么想法吗?

  • 本文向大家介绍从Python中的元组列表中找到包含给定元素的元组,包括了从Python中的元组列表中找到包含给定元素的元组的使用技巧和注意事项,需要的朋友参考一下 列表可以将元组作为其元素。在本文中,我们将学习如何识别包含特定搜索元素(字符串)的元组。 有条件 我们可以根据情况设计跟踪。之后,我们可以提及条件或条件组合。 示例 输出结果 运行上面的代码给我们以下结果- 带过滤器 我们将过滤器功能与