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

Pandas按条件删行失败及数据类型转换报错的解决咨询

问题解决方案

一、删除满足条件的行

原方法失效原因

  • 方法一:inplace=False是默认参数,执行后仅返回删除后的新DataFrame,原sample不会被修改。
  • 方法二:drop()默认inplace=False,调用后不修改原数据;且用iterrows()遍历DataFrame时直接修改原数据,容易引发索引混乱,效率也偏低。

正确写法

写法1:直接修改原数据

sample.drop(sample.loc[(sample.service == 'ftp') & (sample.is_ftp_login.isna())].index, inplace=True)

写法2:覆盖原变量(推荐,避免原地修改的潜在问题)

sample = sample.drop(sample.loc[(sample.service == 'ftp') & (sample.is_ftp_login.isna())].index)

更简洁的筛选写法

直接用布尔索引保留不满足条件的行,效率更高:

sample = sample[~((sample.service == 'ftp') & (sample.is_ftp_login.isna()))]

注:~表示逻辑取反,筛选出不满足"service为ftp且is_ftp_login为空"的行。

二、类型转换问题

原代码报错原因

直接用int()转换整个Series是错误的——int()只能处理单个值,无法处理Series数组;此外如果列中存在空值(NaN)或非数值内容,直接转换也会触发报错。

正确转换步骤

import pandas as pd

# 1. 将列转换为数值类型,非数值内容转为NaN
sample['ct_ftp_cmd'] = pd.to_numeric(sample['ct_ftp_cmd'], errors='coerce')

# 2. 处理空值(二选一,根据业务需求选择)
# 方式A:用0填充空值
sample['ct_ftp_cmd'] = sample['ct_ftp_cmd'].fillna(0)
# 方式B:删除含空值的行
# sample = sample.dropna(subset=['ct_ftp_cmd'])

# 3. 转为int类型后再转字符串
sample['ct_ftp_cmd'] = sample['ct_ftp_cmd'].astype(int).astype(str)

若确认列中无空值和非数值内容,可简化为:

sample['ct_ftp_cmd'] = sample['ct_ftp_cmd'].astype(int).astype(str)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:05:31