鱼C论坛

 找回密码
 立即注册
查看: 5104|回复: 10

遇到了'NoneType' object has no attribute 'replace'的问题

[复制链接]
发表于 2022-11-19 07:54:01 | 显示全部楼层 |阅读模式
10鱼币
  1. def insert_conditions(df, s_conditions, reference_column, new_column_name, position):
  2.     data = df.insert(column = new_column_name,loc = position, value = df['Reason for absence']).replace({'Reason':s_conditions})
  3. df = load_data()
  4. s_conditions = load_conditions()
  5. insert_conditions(df, s_conditions, reference_column='Reason for absence', new_column_name='Reason', position=0)
  6. print(df.iloc[:5][['Reason','ID', 'Reason for absence', 'Month of absence']].to_string())
复制代码


想要javascript:;这种效果 但是报错了。。

b5888b61a4981654138aa446e4fe90e.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-11-19 08:41:37 | 显示全部楼层
这说明了有一个变量返回了 None,而导致的错误,报错大意就是 “None"类型没有属性‘replace',检查检查,调试调试

报错的是第几行?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-11-19 09:39:33 | 显示全部楼层
本帖最后由 suchocolate 于 2022-11-19 10:21 编辑

df.insert()不返回数据,默认返回None,数据直接插入到df里。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-11-19 09:44:34 | 显示全部楼层
df 的 insert 方法的返回值是 None ,导致在执行 insert_conditions 函数时, python 就会执行
  1. data = df.insert(column = new_column_name,loc = position, value = df['Reason for absence']).replace({'Reason':s_conditions})
复制代码
然后变成
  1. data = None.replace({'Reason':s_conditions})
复制代码
然后就会报错
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-11-19 21:06:13 | 显示全部楼层
zhangjinxuan 发表于 2022-11-19 08:41
这说明了有一个变量返回了 None,而导致的错误,报错大意就是 “None"类型没有属性‘replace',检查检查, ...

第二第五行都报错了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-11-19 21:07:17 | 显示全部楼层
tommyyu 发表于 2022-11-19 09:44
df 的 insert 方法的返回值是 None ,导致在执行 insert_conditions 函数时, python 就会执行
然后变成然 ...

哦哦哦 明白你意思了,那这种我要解决这个问题该咋写嘞
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-11-19 21:08:43 | 显示全部楼层
suchocolate 发表于 2022-11-19 09:39
df.insert()不返回数据,默认返回None,数据直接插入到df里。

这个我在也查到了大佬 但是怎么解决啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-11-19 21:09:37 | 显示全部楼层
darknight006 发表于 2022-11-19 21:08
这个我在也查到了大佬 但是怎么解决啊

这个代码只有一个片段,也看不出来怎么改,能把完整代码发一下么
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-11-19 21:29:59 | 显示全部楼层
tommyyu 发表于 2022-11-19 21:09
这个代码只有一个片段,也看不出来怎么改,能把完整代码发一下么
  1. %matplotlib inline
  2. import matplotlib.pyplot as plt
  3. import numpy as np
  4. import scipy as sp
  5. import pandas as pd

  6. def load_data():
  7.     return pd.read_csv('Absenteeism_at_work.csv',sep = ';')
  8. def load_conditions():
  9.     return pd.read_table('conditions.txt', names=['Reason for absence'])
  10. def insert_conditions(df, s_conditions, reference_column, new_column_name, position):
  11.     data = df.insert(column = new_column_name,loc = position, value = df['Reason for absence']).replace({'Reason':s_conditions})


  12. df = load_data()
  13. print(df.info())
  14. df = load_data()
  15. s_conditions = load_conditions()
  16. insert_conditions(df, s_conditions, reference_column='Reason for absence', new_column_name='Reason', position=0)
  17. print(df.iloc[:5][['Reason','ID', 'Reason for absence', 'Month of absence']].to_string())
复制代码


这是目前写到的部分,之前的函数都测试过没啥问题
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-11-19 23:29:59 | 显示全部楼层
本帖最后由 阿奇_o 于 2022-11-19 23:35 编辑
darknight006 发表于 2022-11-19 21:29
这是目前写到的部分,之前的函数都测试过没啥问题


df.insert 函数没返回(即返回None, None属于NoneType  理解?)
df.insert()后,没有返回,但 df 被“就地改变” ,所以要对修改后的df 用 replace() ,

那就另起一行 df.replace(...)  

另外想说,你的几个函数定义得是不是有点多余,有点脱了裤子放屁的感觉。。  

ps: 数据分析或数据处理,尽量用 Jupyter Notebook或IPython等类似交互式界面(省去你一堆print,)。。
很方便,可以一步一步先确定拿到自己需要的数据或效果, 最后有必要的话,再梳理和整合到一起。

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-11-20 16:58:46 | 显示全部楼层
阿奇_o 发表于 2022-11-19 23:29
df.insert 函数没返回(即返回None, None属于NoneType  理解?)
df.insert()后,没有返回,但 df 被 ...

这是我作业。。。一个函数代表一个题目。。然后后面还得调用啥的就。。
我用的就是jupyter
还有就是大佬我分开写只执行了df.insert()啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-25 18:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表