You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas从CSV读取DataFrame后,函数内使用astype/apply修改列类型无效的问题求助

Pandas从CSV读取DataFrame后,函数内使用astype/apply修改列类型无效的问题求助

我遇到了一个挺费解的问题,想请大家帮忙分析下原因。我写了个函数用来处理CSV数据:这个CSV里既有字符串(分类类)列,也有数值列,我的需求是保留第一列的原始类型,把从第二列开始的所有列转成数值类型——如果遇到无法转成数值的字符串,就把它设为NaN,所以用了pd.to_numeric加errors='coerce'参数。

最开始我是这么写的代码:

import pandas as pd
df_temp=pd.read_csv('somefile.csv',dtype="string")
df_temp.iloc[:,1:]=df_temp.iloc[:,1:].apply(pd.to_numeric,errors='coerce').copy()

我还试过用astype("category")来修改列类型,结果同样在函数里没效果:

df_temp.iloc[:,1:]=df_temp.iloc[:,1:].astype("category").copy()

奇怪的是,这段代码在Jupyter Notebook里单独运行的时候完全正常,但把它放进函数内部执行后,df_temp的列类型根本没变化,还是停留在object或者string类型,完全没被修改。

不过我找到了一个临时的 workaround:先把所有列都按category类型读取,再去转数值列:

df_temp=pd.read_csv('somefile.csv',dtype="category") 
df_temp.iloc[:,1:]=df_temp.iloc[:,1:].apply(pd.to_numeric,errors='coerce').copy()

这样做虽然会因为部分列是字符串和数值混合出现一些警告,但我本来就希望无法转数值的字符串变成NaN,所以这些警告我可以接受。

我现在最困惑的就是:为什么第一种写法在函数里完全不起作用?有没有人遇到过类似的情况,或者能帮我理清背后的原因?

备注:内容来源于stack exchange,提问作者Ohad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 17:49:33