Pandas 您所在的位置:网站首页 pandas条件筛选后赋值 Pandas

Pandas

2024-06-02 04:42| 来源: 网络整理| 查看: 265

前言

在数据分析时,原始数据往往不能满足我们的需求,经常需要按照一定条件创建新的数据列或者修改原有数据列,然后进行后续分析。

本次我们将介绍四种新增数据列的方法:直接赋值、df.apply方法、df.assign方法以及按条件筛选后赋值。

本文框架0. 导入Pandas1. 读取数据与数据预处理2. 直接赋值3. df.apply方法4. df.assign方法5. 按条件筛选后赋值0. 导入Pandas代码语言:javascript复制import pandas as pd 1. 读取数据与数据预处理代码语言:javascript复制# 读取数据 data = pd.read_csv("./datas/04/Weather_2018.csv") -------------------------------------------------------------------------------- # 查看数据前6行 data.head(6) # 返回结果 ymd bWendu yWendu tianqi fengxiang fengli aqi aqiInfo aqiLevel 0 2018-01-01 3℃ -6℃ 晴~多云 东北风 1-2级 59 良 2 1 2018-01-02 2℃ -5℃ 阴~多云 东北风 1-2级 49 优 1 2 2018-01-03 2℃ -5℃ 多云 北风 1-2级 28 优 1 3 2018-01-04 0℃ -8℃ 阴 东北风 1-2级 28 优 1 4 2018-01-05 3℃ -6℃ 多云~晴 西北风 1-2级 50 优 1 5 2018-01-06 2℃ -5℃ 多云~阴 西南风 1-2级 32 优 1 -------------------------------------------------------------------------------- # 替换掉温度的后缀℃ # 先将数据转化成字符串,再将"℃"替换为空,最后再转化为数值 data["bWendu"] = data["bWendu"].str.replace("℃", "").astype("int32") data["yWendu"] = data["yWendu"].str.replace("℃", "").astype("int32") -------------------------------------------------------------------------------- # 查看转化后数据框 data.head() # 返回结果 bWendu yWendu tianqi fengxiang fengli aqi aqiInfo aqiLevel ymd 2018-01-01 3 -6 晴~多云 东北风 1-2级 59 良 2 2018-01-02 2 -5 阴~多云 东北风 1-2级 49 优 1 2018-01-03 2 -5 多云 北风 1-2级 28 优 1 2018-01-04 0 -8 阴 东北风 1-2级 28 优 1 2018-01-05 3 -6 多云~晴 西北风 1-2级 50 优 1 2. 直接赋值

我们可以通过"df["新列名"] = ……"方式添加新列。

代码语言:javascript复制# 计算温差 data["Temperature_difference"] = data["bWendu"] - data["yWendu"] # 查看添加新列后的数据 data.head() # 返回结果 ymd bWendu yWendu ... aqiInfo aqiLevel Temperature_difference 0 2018-01-01 3 -6 ... 良 2 9 1 2018-01-02 2 -5 ... 优 1 7 2 2018-01-03 2 -5 ... 优 1 7 3 2018-01-04 0 -8 ... 优 1 8 4 2018-01-05 3 -6 ... 优 1 9 3. df.apply方法

使用apply时,通常放入一个 lambda 函数表达式、或一个函数作为操作运算。

在此我们为数据添加"Temperature_type"列,设置最高温度大于30为热,最低气温低于-10为冷,其余为正常。

代码语言:javascript复制# 定义函数 def Temperature_type(df): if df["bWendu"] > 30: return "Hot" elif df["yWendu"] < -10: return "cold" else: return "normal" # apply添加"Temperature_type"列 # axis=1,表示横向操作,增加新的列;axis=0表示竖向操作,是增加新的行 data["Temperature_type"] = data.apply(Temperature_type,axis=1) -------------------------------------------------------------------------------- # 查看结构 # df.value_counts()计算数据出现的频率 data["Temperature_type"].value_counts() # 返回结果 normal 286 Hot 71 cold 8 Name: Temperature_type, dtype: int64 4. df.assign方法

①assign赋值新列时,一般用"新列名=表达式"的形式,其中新列名为变量的形式,所以不加引号(加引号时意味着是字符串);

②assign返回创建了新列的dataframe,不会修改原本的dataframe,所以一般需要用新的dataframe对象接收返回值;

③assign不仅可用于创建新的列,也可用于更新已有列,此时创建的新列会覆盖原有列。

这这里,我们将最低气温和最低气温转化为华氏度。

代码语言:javascript复制# 添加华氏度列 data.assign( b_Fahrenheit = lambda df : df["bWendu"] * 9 / 5 + 32, y_Fahrenheit = lambda df : df["yWendu"] * 9 / 5 + 32) # 返回结果 ymd bWendu yWendu ... Temperature_type b_Fahrenheit y_Fahrenheit 0 2018-01-01 3 -6 ... normal 37.4 21.2 1 2018-01-02 2 -5 ... normal 35.6 23.0 2 2018-01-03 2 -5 ... normal 35.6 23.0 3 2018-01-04 0 -8 ... normal 32.0 17.6 4 2018-01-05 3 -6 ... normal 37.4 21.2 .. ... ... ... ... 5. 按条件筛选后赋值代码语言:javascript复制# 创建"Temperature_difference"空列 data["Temperature_difference"] = '' # 为"Temperature_difference"赋值 data.loc[data["bWendu"]-data["yWendu"]>10,"Temperature_difference"] = "温差大" data.loc[data["bWendu"]-data["yWendu"]


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有