鱼C论坛

 找回密码
 立即注册
查看: 1943|回复: 6

关于pandas修改数据的问题

[复制链接]
发表于 2023-8-24 11:04:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
stu = pandas.read_excel(filename)  #读取excel文件
modifyId = queryById()  #通过id查询到对应的行
    if modifyId:
        stuName,stuSex,stuAge,chinese,maths,english = input_sut()
        stu.loc[modifyId[0],'姓名'] = stuName
        stu.loc[modifyId[0],'性别'] = stuSex
        stu.loc[modifyId[0],'年龄'] = stuAge
        stu.loc[modifyId[0],'语文'] = chinese
        stu.loc[modifyId[0],'数学'] = maths
        stu.loc[modifyId[0],'英语'] = english
        #print(modifyId)
        stu.to_excel(filename,index=False)
        print('修改成功!')

为什么我运行后,表里的原值没有修改,反而新插入了一行啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-24 11:05:06 | 显示全部楼层
这个问题可能是由于在将修改后的数据写入Excel文件时没有覆盖原有数据导致的。在使用 to_excel 函数时,如果没有指定 mode 参数,默认的行为是将数据写入到一个新的Excel文件中,而不是覆盖原有的文件。

为了解决这个问题,你可以在调用 to_excel 函数时指定 mode 参数为 'a' ,表示以追加模式写入数据。这样就能够将修改后的数据追加到原有的文件中,而不是创建一个新的文件。

修改后的代码如下:
stu.to_excel(filename, index=False, mode='a')

这样运行后,就能够将修改后的数据覆盖原有数据,而不会插入新的行了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-24 11:05:24 | 显示全部楼层
根据你提供的代码,问题可能出在以下几个方面:

1. queryById() 函数返回的 modifyId 是一个列表。在你的代码中,你使用了 modifyId[0] 来访问查询到的行的索引值。如果 modifyId 返回的是多个匹配行的索引列表,那么你需要注意选择正确的索引值来修改对应的行。可以通过打印 modifyId 的值来确认是否返回了正确的索引。

2. 在使用 loc 函数修改 DataFrame 中的数据时,确保你正在使用正确的列名。在你的代码中,你使用了 '姓名''性别''年龄''语文''数学''英语' 作为列名来进行修改。请确保这些列名与 DataFrame 的列名完全一致,包括大小写和空格等。

3. 检查输入的修改数据是否正确赋值给了相应的变量 stuNamestuSexstuAgechinesemathsenglish。确保这些变量包含了你要修改的新值。

4. 最后,请确保 filename 参数指定的 Excel 文件路径是正确的,并且你有写入该文件的权限。

综上所述,请检查以上几个方面,修正可能存在的问题。如果问题仍然存在,请提供更多代码和示例数据,以便更好地理解问题并给出更具体的解决方案。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-24 11:30:19 | 显示全部楼层
本帖最后由 爱吃肥肉的马 于 2023-8-24 11:32 编辑
陶远航 发表于 2023-8-24 11:05
根据你提供的代码,问题可能出在以下几个方面:

1. queryById() 函数返回的 modifyId 是一个列表。在你 ...


我截了个运行结果的图,在前后都加了个打印stu;
修改后,对应的1002那行的值没变,反而在stu中新加了一行数据,是我修改方法用错了吗?
11.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-24 11:41:26 | 显示全部楼层
isdkz 发表于 2023-8-24 11:05
这个问题可能是由于在将修改后的数据写入Excel文件时没有覆盖原有数据导致的。在使用 to_excel 函数时,如 ...

我前后都打印了一下stu这个二维表,看出来不是写入excel时出的问题,应该是改值得时候就出错了,但我不晓得哪错了·······
11.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-24 11:45:53 | 显示全部楼层
爱吃肥肉的马 发表于 2023-8-24 11:41
我前后都打印了一下stu这个二维表,看出来不是写入excel时出的问题,应该是改值得时候就出错了,但我不晓 ...

可能获取到的modifyId不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-25 15:46:04 | 显示全部楼层
根据你提供的代码,出现原值没有修改而新插入一行的问题可能是因为 `modifyId` 的值不正确或者在修改特定行时出现了错误。

以下是一些可能导致问题的原因和建议的解决方法:

1. 检查 `queryById()` 函数:确保 `queryById()` 函数能够正确返回要修改的行的索引(modifyId)。你可以在打印语句 `print(modifyId)` 后进行检查,确认该索引的值是否正确。

2. 检查输入数据:确保输入的学生信息 (`stuName, stuSex, stuAge, chinese, maths, english`) 是有效的,并且不为空。如果其中任何一个输入为空或无效,可能导致在修改时出现问题。

3. 检查文件的正确读取和写入:确保 `pandas.read_excel()` 方法成功地读取了 Excel 文件,并且 `to_excel()` 方法正确地将修改后的 DataFrame 写回到文件中。可以使用打印语句来检查读取和写入操作是否正常。

另外,请确保以上代码段中的缩进正确,以免出现语法错误。

如果仍然无法解决问题,请提供更多关于 `queryById()` 函数和相关输入数据的详细信息,以便更准确地诊断问题所在。

希望这些建议对你有所帮助!如果还有其他问题,请随时提问。
此内容为ChatGPT回答,如果胡说八道,请不要理会
如果对你有帮助,请设置一个最佳答案!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-11 08:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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