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

Python Pandas正则替换数据:温度风速及事件列处理需求

Pandas数据清洗:数值提取与异常值替换方案

嘿,我帮你把这个Pandas数据处理的需求整理成清晰的解决方案啦,一起来看看:

需求说明

  • 移除temperature(温度)和windspeed(风速)列中的字母单位,例如将“32 F”转为32、“6 mph”转为6
  • 将这两列中的所有负数及-99999转换为NaN
  • 将event列中的所有0替换为No Event

完整实现代码

import pandas as pd
import numpy as np

# 补全后的示例输入数据
input_data = {
    'day': ['1/1/2017', '1/4/2017', '1/5/2017', '1/6/2017', '1/7/2017', '1/8/2017', '1/9/2017', '1/10/2017'],
    'temperature': ['32 F', '-15 C', '45 F', '-99999', '28 F', '50 F', '-5 C', '38 F'],
    'windspeed': ['6 mph', '12 mph', '-3 mph', '20 mph', '-99999', '15 mph', '8 mph', '-10 mph'],
    'event': ['Rain', 0, 'Snow', 'Sunny', 0, 'Fog', 0, 'Cloudy']
}

# 转换为DataFrame
df = pd.DataFrame(input_data)

# 1. 提取温度和风速列的数值,移除字母单位
df['temperature'] = df['temperature'].str.extract('(-?\d+)').astype(float)
df['windspeed'] = df['windspeed'].str.extract('(-?\d+)').astype(float)

# 2. 将负数和-99999替换为NaN
df['temperature'] = df['temperature'].apply(lambda x: np.nan if (x < 0 or x == -99999) else x)
df['windspeed'] = df['windspeed'].apply(lambda x: np.nan if (x < 0 or x == -99999) else x)

# 3. 替换event列的0为No Event
df['event'] = df['event'].replace(0, 'No Event')

# 查看处理后的结果
print(df)

代码细节解释

  • 提取数值:使用str.extract('(-?\d+)')正则表达式匹配包含负号的数字,精准提取列中的数值部分,再通过astype(float)转换为数值类型,彻底去掉后面的字母单位
  • 替换异常值:用apply配合lambda函数,逐个判断数值是否为负数或-99999,满足条件则替换为np.nan,方便后续的缺失值处理
  • 替换event列:直接调用replace方法,一次性将列中所有的0替换为No Event,简洁高效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:00:30