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

如何删除Pandas DataFrame中含NoneType与字符串的行,仅保留数值型数据?

解决方法:保留数值型数据并过滤无效行

首先得指出你代码里的核心问题:df_3.to_csv('Documents/a.csv',index=False)这个方法的作用是把DataFrame写入到CSV文件中,它返回的是None,而不是新的DataFrame。所以你把它赋值给df5之后,df5就是一个NoneType对象,自然调用不了['rt']或者dropna()这些方法,这就是你报错的原因。

下面给你两种可行的解决方案,根据你的需求选择:

方案一:直接在原DataFrame上清洗(推荐)

不需要先存成CSV再处理,直接对提取后的df_3进行清洗,最后再保存即可:

import pandas as pd

# 提取需要的列
df_3 = df_cor_inc[['Person ID','rt']]

# 将rt列转换为数值类型,非数值内容会被转为NaN
df_3['rt'] = pd.to_numeric(df_3['rt'], errors='coerce')

# 删除rt列为NaN的行(包括空值和非数值字符串)
df_cleaned = df_3.dropna(subset=['rt'])

# 保存清洗后的结果到CSV
df_cleaned.to_csv('Documents/a.csv', index=False)

这个方法的好处是效率更高,不需要额外的读写文件操作,而且pd.to_numeric能识别整数、浮点数格式的字符串,适用性更广。

方案二:先保存再读取处理(如果你确实需要先存文件)

如果你一定要先把数据存成CSV再处理,那必须用pd.read_csv把文件读回来,得到有效的DataFrame后再操作:

import pandas as pd

# 提取列并保存到CSV
df_3 = df_cor_inc[['Person ID','rt']]
df_3.to_csv('Documents/a.csv', index=False)

# 读取CSV文件得到DataFrame
df5 = pd.read_csv('Documents/a.csv')

# 转换rt列并过滤无效行
df5['rt'] = pd.to_numeric(df5['rt'], errors='coerce')
df_cleaned = df5.dropna(subset=['rt'])

补充:用isnumeric()过滤的注意事项

如果你想用str.isnumeric()的方式过滤,要注意这个方法只对整数格式的字符串有效(比如'1230'会返回True,但'123.45'或者空字符串''会返回False),而且要先排除空值,否则会报错:

df_3 = df_cor_inc[['Person ID','rt']]
# 先排除空值,再判断是否为数字字符串
df_cleaned = df_3[df_3['rt'].notna() & df_3['rt'].astype(str).str.isnumeric()]

这种方法适合你确定rt列只有整数的场景,否则还是方案一更稳妥。

内容的提问来源于stack exchange,提问作者dazai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 21:42:28