在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),"温差如何"] = "平静的一天。"

在这里插入图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐