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
相关产品推荐
相关产品推荐

