0. 问题
对于如下的Excel文件:

怎样做如下两个处理:
将日期列的“2023-01-07 星期六”,拆分成“2023-01-07”和“星期六”两列;
将最高温、最低温的两列的温度转换成数字类型,就是把数字中的小圆圈去掉;
结果形式为:

1. 读取excel数据
import pandas as pd
df = pd.read_excel(
"./datas/beijing_tianqi/北京10年天气数据.xlsx",
engine="openpyxl")
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° | 晴~多云 | 无持续风向微风 |
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 | 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° | 晴~多云 | 无持续风向微风 | 周四 |
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
查看视频: