在Pandas数据处理时,经常要用到添加数据列的方式;这篇文章主要解决的就是在Pandas中添加列的问题;
常用的添加列的方法有如下几种:直接赋值,用df.apply()
方法, 用df.assign()
方法,条件分组后,分别赋值;详细说明如下:
数据准备工作
首先读入数据,数据如下,可以复制到本地(保存为CSV),进行练习:
Date,天气,高温,低温,风向,风速
2020/7/16,晴,26,21,东风,2
2020/7/17,多云,25,21,西风,3
2020/7/20,小雨,24,15,东北风,5
2020/7/21,多云转晴,22,17,东风,2
2020/7/22,多云,20,16,西风,1
2020/7/23,雷阵雨,20,20,东北风,3
2020/7/24,多云,26,17,西南风,2
2020/7/27,小雨,26,17,东风,3
2020/7/28,多云转晴,25,24,西风,5
2020/7/29,晴,24,23,东北风,2
2020/7/30,晴,22,20,东风,2
2020/7/31,晴,26,22,东风,3
2020/8/3,晴,25,22,西风,2
2020/8/4,多云转晴,24,16,东北风,3
2020/8/5,多云,22,14,东风,5
2020/8/6,雷阵雨,20,12,西风,2
2020/8/7,小雨,20,13,东北风,1
2020/8/10,多云转晴,26,22,西南风,3
读入代码:
import pandas as pd
df=pd.read_csv(r'./data_select.csv',encoding='gbk') # 这里因为我是用Excel保存成csv的,所以是'gbk',常用的编码为'UTF-8'
一、直接赋值
- 要求:在低温与高温后增加 ℃ ,在风速后增加‘级’;
df.loc[:,"高温℃"]= df["高温"].astype("str")+'℃'
df.loc[:,"低温℃"]= df["低温"].astype("str")+'℃'
df.loc[:,"风速_new"]= df["风速"].astype("str")+'级'
- 要求:增加新列,计算出温差;
df.loc[:,'温差'] = df["高温"]- df["低温"]
# 或者这样写也可以
df['温差'] = df["高温"]- df["低温"]
二、用df.apply()
方法
- 要求:增加一列:温差如何;要求如下:
- 当昼夜温差大于等于5,则显示:昼夜温差好大!!
- 当昼夜温差小于等于2,则显示:昼夜温差超小~
- 其他情况显示:真是普通的一天!
代码如下:
def func_temp(df):
if(df["温差"]>=5):
return("昼夜温差好大!!")
elif(df["温差"]<=2):
return("昼夜温差超小~")
else:
return("真是普通的一天!")
df.loc[:,"温差如何"] = df.apply(func_temp,axis=1)
三、用df.assign()
方法
与df.apply()
类似,可以传入匿名函数,得到最终的结果;例如:
要求:增加一列 风的方向;
df.assign( 风的方向 = lambda x: (x["风向"].str[:-1]))
# 但其实只需要最简单的语句就能实现以上功能,如下:
# df["风的方向"]=df["风向"].str[:-1]
这里不太一样的地方是,df.assign()
不会修改原df, 所以我们需要赋值到一个新的df中才可以;
四、按条件分组后,分别赋值
上面我们是用 df.apply()
实现了为不同温差增加备注列:温度如何; 但其实我们还可以使用更易懂的方式来完成这个功能;注意:其中多个条件需要用 &
(与运算) 或者 |
(或运算),条件最好用()
包起来,以免逻辑不清; 举例如下:
df.loc[df["高温"]-df["低温"]>=5,"温差如何"] = "昼夜温差好大!"
df.loc[df["高温"]-df["低温"]<=2,"温差如何"] = "昼夜温差超小~"
df.loc[(df["高温"]-df["低温"]<5) & (df["高温"]-df["低温"]>2),"温差如何"] = "平静的一天。"