首页 > 编程问答 >pandas 数据框单元格中的列表

pandas 数据框单元格中的列表

时间:2024-07-20 22:59:44浏览次数:11  
标签:python pandas

如果我们有一个(更大的)数据框,显示旅行中个人(行)访问的状态:

df = pd.DataFrame({'states_visited': [['NY', 'CA'], 'CA', 'CA']}, index = ['John', 'Mary', 'Joe'])

        states_visited
John    [NY, CA]
Mary    CA
Joe     CA

因为 states_visited 列具有 list 类型的值,我们不能使用通常的pandas方法,例如:

df['states_visited'].unique()

获得预期结果: [[NY, CA] , CA] 例如,如果我们想知道一起访问了哪些州(纽约州和加利福尼亚州)以及分别访问了哪些州(加利福尼亚州),这就是我们所需要的。

相反,我们得到 TypeError: unhashable type: 'list'

同样,我们无法 df['states_visited'].str.contains('NY') 知道谁在他/她的旅行中访问了纽约(它将返回 NaN 约翰)。为了实现这一点,我们必须经历类似的事情:

df['states_visited'].explode()
                 .dropna()
                 .str.contains('NY')
                 .groupby(level=0).any()
                 .astype(float)
                )

所以,如果 pandas 不喜欢嵌套数据,那么在 pandas 数据框/系列中拥有类似列表的值的正确方法是什么(不是简单的字典,因为该示例数据是更大数据框的一部分)?


在 Pandas 中处理数据框单元格中的列表可能会很棘手,因为许多 Pandas 函数并非旨在直接处理此类数据。但是,有一些方法可以有效地处理此类场景,而无需像在示例中那样进行复杂的操作。

1. 针对唯一列表:

  • 将列表转换为元组: unique 函数需要可哈希的项目,而列表不是。将列表转换为元组可以解决此问题,因为元组是不可变的,因此是可哈希的。
df['states_visited'] = df['states_visited'].apply(lambda x: tuple(x) if isinstance(x, list) else x)
unique_states = df['states_visited'].unique()
print(unique_states) 

输出:

array([('NY', 'CA'), 'CA'], dtype=object)

2. 针对包含特定州:

  • 使用 apply 和列表推导: 可以使用 apply states_visited 列上循环,并使用列表推导来检查列表中是否存在 'NY'。
df['visited_NY'] = df['states_visited'].apply(lambda x: 'NY' in x if isinstance(x, list) else 'NY' == x)
print(df)

输出:

        states_visited  visited_NY
John    [NY, CA]          True
Mary    CA                False
Joe     CA                False

关于数据结构:

虽然这些方法适用于的用例,但对于更大的数据集,在 Pandas 数据框中存储嵌套列表并不是最有效或最便捷的方法。以下是一些替代方案:

  • 使用 explode 并创建虚拟变量:
df = df.explode('states_visited')
df = pd.crosstab(df.index, df.states_visited).astype(bool).reset_index()
print(df)

输出:

  index     CA     NY
0   Joe   True  False
1  John   True   True
2  Mary   True  False

此方法将每种状态表示为单独的列,当需要频繁地对各个状态执行操作时,这非常有用。

  • 使用其他数据结构,例如字典或列表列表: 如果处理的是更复杂的关系(例如,每个州的访问日期),将此信息存储在单独的字典或列表中,然后使用这些数据结构创建单独的数据框可能更有意义。

选择最佳方法取决于的具体数据大小、需要执行的操作类型以及的性能考虑因素。

标签:python,pandas
From: 78773065

相关文章

  • Python:如何通过请求帖子对评论进行投票?
    我对评论进行投票的代码无法正常工作。它返回一个http500错误。我有一个使用用户登录的Python程序,它应该自动对评论进行投票。我的代码如下:frombs4importBeautifulSoupimportrequestslogin_url="https://xxxxxxxxxxx/auth/login"login_url_post="http......
  • python_day7(补1)
    数据类型​ 之前为列表类型​ 插入一个元组的介绍 之后还有字典,三者区别为括号方式()[]{}元组类型(tuple)使用:先定义一个元组数据​ vegetable_tuple='(tomato','corn','cucumber','carrot','corn','pumpkin)'与列表类型格式很像,不过只能取不能改,需要特......
  • 在 python 中写入 %appdata% 时出现奇怪的行为
    我试图将一些数据写入%appdata%。一切似乎都像Script1的输出中所示的那样工作。正在创建新目录并保存文件,并且也成功检索数据。但尝试查看文件资源管理器中的数据时,该文件夹不存在!CMD也找不到文件和目录。后来我手动创建了文件,检查了一下,发生了什么。CMD现在可以找到该文......
  • 使用 selenium 在 python 中打开 chrome 中的链接
    通过此链接https://bancadatistatisticaoas.inail.it/analytics/saw.dll?Dashboard&PortalPath=%2Fshared%2FBDS%2F_portal%2FINF_Definiti_Industria_e_Servizi我需要单击“FCostruzioni”,然后单击F41COSTRUZIONIED埃迪菲西。这是我的代码,但它不起作用。我做错了......
  • Pandas 数据框中的排列总和呈超指数增长
    我有一个看起来像importpandasaspddata={"Race_ID":[2,2,2,2,2,5,5,5,5,5,5],"Student_ID":[1,2,3,4,5,9,10,2,3,6,5],"theta":[8,9,2,12,4,5,30,3,2,1,50]}df=pd.DataFrame(data)的pandas数据框,我想通过以下方法创建一个新列df[�......
  • 七大排序算法的Python实现
    七大排序算法的Python实现1.冒泡排序(BubbleSort)算法思想冒泡排序通过重复交换相邻的未按顺序排列的元素来排序数组。每次迭代都将最大的元素“冒泡”到数组的末尾。复杂度分析时间复杂度:O(n^2)空间复杂度:O(1)defbubble_sort(arr):n=len(arr)for......
  • Pandas学习笔记
    数据载入及初步观察1第一章:数据加载1.1载入数据数据集下载https://www.kaggle.com/c/titanic/overview1.1.1任务一:导入numpy和pandasimportnumpyasnpimportpandasaspdimportosasos【提示】如果加载失败,学会如何在你的python环境下安装numpy和pandas这两个库......
  • python反序列化
    之前hgame中遇到python反序列化,这次正好借分享会来尽可能详细学习一下python反序列化基础知识什么是序列化?反序列化?在很多时候为了方便对象传输,我们往往会把一些内容转化成更方便存储、传输的形式。我们把“对象->字符串”的翻译过程称为“序列化”;相应地,把“字符串->对......
  • 我在 python 项目中不断收到“无法识别图像文件中的数据”错误
    我正在尝试向我的TK窗口添加一个图标,但我不断收到一条错误消息:Traceback(mostrecentcalllast):File"C:\Users\roger\source\repos\PythonApplication\PythonApplication.py",line7,in<module>windowIcon=tk.PhotoImage(file="C:/Users/roger/Downloa......
  • Python学习笔记41:游戏篇之外星人入侵(二)
    前言在上一篇文章,我们已经创建好了项目目录,在今天,我们主要编写入口模块的功能。mainmain.py模块是我们游戏程序的入口,所有我们需要在模块中编写游戏主启动以及主页面相关的代码。当前我们的main模块是这样的,这是我们创建项目时默认生成一些代码,接下来我们就要进行我们......