Pandas 报错 TypeError: ‘Series‘ objects are mutable, thus they cannot be hashed
一、需求
根据原始 CSV 文件的列 A 的值,添加一列 B。
二、尝试 1
1. 将 A 列与 B 列对应的值写入字典 dict,A 列为 key,B 列为 value。
2. 将 CSV 文件处理为 DataFrame。
3.
import pandas as pd# 如果 df['A']存在于 dict_a 中,则取 value,值,否则使用默认值 15
dict_a = {'a':1,'b':1,'c':2,'d':4,'d':3}df = pd.read_csv(example.csv)
df['B'] = dict_a[df['A']]
# 上句话报错: TypeError: 'Series' objects are mutable, thus they cannot be hashed
在用pandas 处理文件时 报错:TypeError: 'Series' objects are mutable, thus they cannot be hashed,意思是 df['B'] 整体上是一个 Series,是容易改变的,因此不能作为 index 进行检索并赋值。
三、尝试 2
使用 for 循环,遍历 DataFrame的每一行,代码如下:
data = pd.read_csv('example.csv')
df = pd.DataFrame(data)
df['B'] = 15 # 设置默认值为 15# iterrows 遍历 DataFrame 的每一行
for index, row in df.iterrows():if row['A'] in dict_a: print(row['B']) row['B'] = dict_a[row['A']] print(row['B']) else:row['B'] = 15df.to_csv('finished.csv')
通过 print 出来的结果可以看出来确实赋值成功,但生成的文件却没变化。
原因是:iterrows不要修改行,不应该修改正在迭代的东西。这不能保证在所有情况下都能正常工作。根据数据类型的不同,迭代器返回一个副本而不是一个视图,因此写入它将不起作用。
四、解决办法
最终使用 lambda 函数 及 df.apply()函数
遍历行并访问函数的多个列。
代码如下:
# 注意 函数 formula() 一定要有返回值,否则下面 apply 函数不起作用
def formula(x):if x in slidetime_dict:return slidetime_dict[x]else:return 15df['slidetime'] = df.apply(lambda row: formula(row['A']), axis=1)
以上,问题解决。
————————————————————————————————————————————————————
更新补充知识点:
pandas 使用 apply() 函数时,被调用的函数(本例中是 formula())中各种条件分支都要有 return 返回值,否则生成的结果不对。
Pandas 报错 TypeError: ‘Series‘ objects are mutable, thus they cannot be hashed相关推荐
- 错误:‘Series‘ objects are mutable, thus they cannot be hashed
错误:'Series' objects are mutable, thus they cannot be hashed 问题: 我在使用pandas里面的groupby函数:代码如下: People_ ...
- DataFrame/Series运行round()函数报错“TypeError: a float is required”解决办法
DataFrame/Series运行round()函数报错"TypeError: a float is required"解决办法 原代码片段: #把数据按年龄分层,然后按照不同层 ...
- python创建对象后调用对象的方法,报错TypeError: getName() takes 0 positional arguments but 1 was given
源码 ## TODO: Create multiple cars and visualize them height = 4 width = 6 world = np.zeros((height, w ...
- VUE.JS 使用axios数据请求时数据绑定时 报错 TypeError: Cannot set property 'xxxx' of undefined 的解决办法...
data里面做了定义 在方法里面进行赋值 用 this.info = repos.data 数据可以请求到,但是会报错 TypeError: Cannot set property 'listgrou ...
- Python报错TypeError: 'str' object is not callable
原文:http://blog.sina.com.cn/s/blog_71f3890901017rsh.html Python报错TypeError: 'str' object is not calla ...
- python报错 TypeError: an integer is required
问题描述: 在本地使用socket向NetAssist传送数据的时候,执行python文件后发现报出python 报错TypeError: an integer is required错误 代码: 1 ...
- 记录webpack使用问题,使用报错“UnhandledPromiseRejectionWarning,file-loader图片过大,无法加载图片,打包html文件报错TypeError
记录webpack使用报错 版本号问题 运行npm run build,报错 "UnhandledPromiseRejectionWarning: TypeError: this.getRe ...
- Python报错TypeError: ‘User‘ object is not iterable
Python报错TypeError: 'User' object is not iterable 原因 User对象是不可迭代的,我这里是因为User并不是list,所以是不可迭代的,所以不使用迭代即 ...
- [转载]UEditor报错TypeError: me.body is undefined
本文转载来自: UEditor报错TypeError: me.body is undefined 今天在使用UEditor的setContent的时候报错,报错代码如下 TypeError: me.b ...
最新文章
- 一篇综述带你全面了解迁移学习的领域泛化(Domain Generalization)
- pytorch DataLoader
- 网络工程师面试PK--胜者为王
- pythonhash加密_Python字符串hashlib加密模块使用案例
- linux配置rsync服务器
- 【Codeforces 63C】Bulls and Cows
- U盘安装CentOS7的最终解决方案
- xshell5登录不上,让更新,结果还是不行的解决方法
- 给BERT加一个loss就能稳定提升?斯坦福+Facebook最新力作!
- 计算机窗口显示桌面,Windows Server 2012 R2在桌面上显示计算机/网络图标
- c语言学生成绩管理系统的设计,C语言学生成绩管理系统设计
- 吴恩达 Deeplearning深度学习笔记v5.7 最新PDF版 免积分下载
- 龙芯 linux 网页flash,FlashPlayer - 龙芯开源社区
- 用计算机如何算瓷砖菱形加工,瓷砖菱形铺贴怎么计算面积
- html白色背景遮罩,CSS 给图片或背景图片加颜色遮罩
- 文献整理和论文阅读方法
- 自行车码表使用说明—SIGMA(西格玛) BC906
- tplinkwr710n改无线打印服务器,TP-Link TL-WR710N V1无线路由器AP模式设置
- C++ 求最大公因数
- 盗取QQ密码的顽固的IEXPLORE.EXE病毒
热门文章
- Mybatis-There is no getter for property named 'tj' in 'class
- skylake服务器处理器M系列,瞄三大产品线!谈Intel Skylake架构CPU
- Java kafka producer 的常用参数的意义说明及默认值
- DSP C6657 image_processing_evmc6657l网页加载图片示例
- 计算机网络(七)——互联网上的音频/视频服务 和 无线网络与移动网络
- Go channel 通道
- spring源码阅读笔记09:循环依赖
- Ubuntu18.04下 LOAM_Velodyne 的编译安装(PCL为1.8.1)
- 局部线性嵌入 (Locally linear embedding-LLE)原理总结
- 【gdgzezoi】Problem A: Fairy