Pandas实战小练习,北京天气数据的数据清洗处理【文末有数据地址】

0. 问题

对于如下的Excel文件:

Pandas实战小练习,北京天气数据的数据清洗处理【文末有数据地址】_第1张图片

怎样做如下两个处理:

  1. 将日期列的“2023-01-07 星期六”,拆分成“2023-01-07”和“星期六”两列;

  2. 将最高温、最低温的两列的温度转换成数字类型,就是把数字中的小圆圈去掉;

结果形式为:

Pandas实战小练习,北京天气数据的数据清洗处理【文末有数据地址】_第2张图片

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

4. 数据文件地址:

http://www.crazyant.net/wp-content/uploads/2023/01/%E5%8C%97%E4%BA%AC10%E5%B9%B4%E5%A4%A9%E6%B0%94%E6%95%B0%E6%8D%AE.xlsx

查看视频:

你可能感兴趣的:(pandas,python,开发语言)