日期,天气状况,气温,风力风向
2023-01-01,多云/阴,8℃/3℃,东风1-2级/东北风1-2级
2023-01-02,阴/多云,9℃/0℃,东北风1-2级/东风1-2级
2023-01-03,多云/多云,9℃/0℃,东风1-2级/东风1-2级
2023-01-04,多云/多云,12℃/1℃,东风3-4级/东南风1-2级
2023-01-05,多云/多云,13℃/3℃,东北风1-2级/西风1-2级
2023-01-06,晴/晴,14℃/0℃,西风3-4级/西风1-2级
2023-01-07,晴/晴,16℃/4℃,西南风1-2级/东南风1-2级
2023-01-08,晴/晴,19℃/3℃,南风1-2级/东北风1-2级
2023-01-09,晴/晴,16℃/3℃,东北风3-4级/东北风3-4级
2023-01-10,多云/多云,12℃/4℃,东风1-2级/东风1-2级
import pandas as pd
def tianqi_bai(x):
return x["天气状况"].split("/")[0]
def tianqi_hei(x):
return x["天气状况"].split("/")[1]
if __name__ == '__main__':
file_path = "weather_nanjing_2023.csv"
df = pd.read_csv(file_path)
# 修改索引
df.set_index("日期", inplace=True)
# 修改整列的值
df.loc[:, "气温"] = df["气温"].str.replace("℃", "")
# 新增列
# 第1种方式 : 直接赋值
df.loc[:, "最高气温"] = df["气温"].str.split("/").str.get(0)
df.loc[:, "最低气温"] = df["气温"].str.split("/").str.get(1)
# 第2种方式 apply方法 (axis=1 列属性; axis=0 行属性)
df.loc[:, "白天天气"] = df.apply(tianqi_bai, axis=1)
df.loc[:, "夜间天气"] = df.apply(tianqi_hei, axis=1)
# 第3种方式
df = df.assign(
白天风力风向=lambda x: x["风力风向"].str.split("/").str.get(0),
夜间风力风向=lambda x: x["风力风向"].str.split("/").str.get(1)
)
df = df.assign(
白天风向=lambda x: x["白天风力风向"].str.split("风").str.get(0) + "风",
白天风力=lambda x: x["白天风力风向"].str.split("风").str.get(1),
夜间风向=lambda x: x["夜间风力风向"].str.split("风").str.get(0) + "风",
夜间风力=lambda x: x["夜间风力风向"].str.split("风").str.get(1),
)
# 删除列 axis=1
df = df.drop(['天气状况', '气温', '风力风向', '白天风力风向', '夜间风力风向'], axis=1)
print(df.head())
# 对某一列数据进行分组计数
# print(df["白天天气"].value_counts())
df.to_csv("weather_nanjing_2023_transfer.csv")
结果如下所示:
日期,最高气温,最低气温,白天天气,夜间天气,白天风向,白天风力,夜间风向,夜间风力
2023-01-01,8,3,多云,阴,东风,1-2级,东北风,1-2级
2023-01-02,9,0,阴,多云,东北风,1-2级,东风,1-2级
2023-01-03,9,0,多云,多云,东风,1-2级,东风,1-2级
2023-01-04,12,1,多云,多云,东风,3-4级,东南风,1-2级
2023-01-05,13,3,多云,多云,东北风,1-2级,西风,1-2级
2023-01-06,14,0,晴,晴,西风,3-4级,西风,1-2级
2023-01-07,16,4,晴,晴,西南风,1-2级,东南风,1-2级
2023-01-08,19,3,晴,晴,南风,1-2级,东北风,1-2级
2023-01-09,16,3,晴,晴,东北风,3-4级,东北风,3-4级
2023-01-10,12,4,多云,多云,东风,1-2级,东风,1-2级