在Pandas数据处理时,经常要用到添加数据列的方式;这篇文章主要解决的就是在Pandas中添加列的问题; 常用的添加列的方法有如下几种:直接赋值,用df.apply() 方法, 用df.assign()方法,
在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.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),"温差如何"] = "平静的一天。"