![](/style/images/good.png)
![](/style/images/bad.png)
【Pandas总结】第六节 Pandas 添加列
source link: https://blog.51cto.com/u_15807450/5756324
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
【Pandas总结】第六节 Pandas 添加列
推荐 原创Table of Contents
在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'
![【Pandas总结】第六节 Pandas 添加列_python](https://s2.51cto.com/images/blog/202210/14131036_6348ef4c7477183166.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
一、直接赋值
- 要求:在低温与高温后增加 ℃ ,在风速后增加‘级’;
df.loc[:,"高温℃"]= df["高温"].astype("str")+'℃'
df.loc[:,"低温℃"]= df["低温"].astype("str")+'℃'
df.loc[:,"风速_new"]= df["风速"].astype("str")+'级'
![【Pandas总结】第六节 Pandas 添加列_python_02](https://s2.51cto.com/images/blog/202210/14131036_6348ef4c8d87687306.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
- 要求:增加新列,计算出温差;
df.loc[:,'温差'] = df["高温"]- df["低温"]
# 或者这样写也可以
df['温差'] = df["高温"]- df["低温"]
![【Pandas总结】第六节 Pandas 添加列_pandas_03](https://s2.51cto.com/images/blog/202210/14131036_6348ef4c8235313480.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
二、用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)
![【Pandas总结】第六节 Pandas 添加列_pandas_04](https://s2.51cto.com/images/blog/202210/14131036_6348ef4c8a8d447459.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
三、用df.assign()
方法
与df.apply()
类似,可以传入匿名函数,得到最终的结果;例如:
要求:增加一列 风的方向;
df.assign( 风的方向 = lambda x: (x["风向"].str[:-1]))
# 但其实只需要最简单的语句就能实现以上功能,如下:
# df["风的方向"]=df["风向"].str[:-1]
这里不太一样的地方是,df.assign()
不会修改原df, 所以我们需要赋值到一个新的df中才可以;
![【Pandas总结】第六节 Pandas 添加列_python_05](https://s2.51cto.com/images/blog/202210/14131036_6348ef4c7d5bc66170.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
四、按条件分组后,分别赋值
上面我们是用 df.apply()
实现了为不同温差增加备注列:温度如何; 但其实我们还可以使用更易懂的方式来完成这个功能;注意:其中多个条件需要用 &
(与运算) 或者 |
(或运算),条件最好用()
包起来,以免逻辑不清; 举例如下:
df.loc[df["高温"]-df["低温"]>=5,"温差如何"] = "昼夜温差好大!"
df.loc[df["高温"]-df["低温"]<=2,"温差如何"] = "昼夜温差超小~"
df.loc[(df["高温"]-df["低温"]<5) & (df["高温"]-df["低温"]>2),"温差如何"] = "平静的一天。"
![【Pandas总结】第六节 Pandas 添加列_python_06](https://s2.51cto.com/images/blog/202210/14131036_6348ef4c8746f42590.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
- 赞
- 收藏
- 评论
- 分享
- 举报
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK