Pandas实战小练习,北京天气数据的数据清洗处理

天气数据的处理

数据地址:北京10年天气数据

1. 读取excel数据

import pandas as pd
df = pd.read_excel("./datas/beijing_tianqi/北京10年天气数据.xlsx", engine="openpyxl")
df.head()
日期 最高温 最低温 天气 风力风向
0 2012-01-01 周日 -4° 多云~阴 无持续风向微风
1 2012-01-02 周一 -6° 北风4-5级
2 2012-01-03 周二 -8° 北风~无持续风向3-4级~微风
3 2012-01-04 周三 -10° 无持续风向微风
4 2012-01-05 周四 -8° 晴~多云 无持续风向微风

2. 日期拆成两列

def split_date(row):
    date, week = row["日期"].split()
    return date, week
df[["日期", "星期"]] = df.apply(split_date, axis=1, result_type="expand")
df.head()
日期 最高温 最低温 天气 风力风向 星期
0 2012-01-01 -4° 多云~阴 无持续风向微风 周日
1 2012-01-02 -6° 北风4-5级 周一
2 2012-01-03 -8° 北风~无持续风向3-4级~微风 周二
3 2012-01-04 -10° 无持续风向微风 周三
4 2012-01-05 -8° 晴~多云 无持续风向微风 周四

3. 温度字符串的处理

df["最高温"] = df["最高温"].map(lambda x : int(str(x).replace("°", "")))
def get_wendu(x):
    x = str(x).replace("°", "")
    if x:
        return int(x)
    return 0

df["最低温"] = df["最低温"].map(get_wendu)
df.head()
日期 最高温 最低温 天气 风力风向 星期
0 2012-01-01 3 -4 多云~阴 无持续风向微风 周日
1 2012-01-02 2 -6 北风4-5级 周一
2 2012-01-03 1 -8 北风~无持续风向3-4级~微风 周二
3 2012-01-04 1 -10 无持续风向微风 周三
4 2012-01-05 2 -8 晴~多云 无持续风向微风 周四
df.dtypes
日期      object
最高温      int64
最低温      int64
天气      object
风力风向    object
星期      object
dtype: object

Leave a Comment