dataframe 列赋值_如何创建从现有列派生的新列 — pandas 1.1.5 documentation

In [1]: import pandas as pd

本教程使用的数据:

  • 空气质素数据

在本教程中,使用了关于NO2的空气质量数据,这些数据由openaq和py-openaq包提供。air_quality_no2.csv数据集提供了分别位于巴黎、安特卫普和伦敦的 FR04014、 BETR801和伦敦威斯敏斯特测量站的二氧化氮值。

To raw data 原始数据

In [2]: air_quality = pd.read_csv("data/air_quality_no2.csv",
   ...:                           index_col=0, parse_dates=True)
   ...: 

In [3]: air_quality.head()
Out[3]: 
                     station_antwerp  station_paris  station_london
datetime                                                           
2019-05-07 02:00:00              NaN            NaN            23.0
2019-05-07 03:00:00             50.5           25.0            19.0
2019-05-07 04:00:00             45.0           27.7            19.0
2019-05-07 05:00:00              NaN           50.4            16.0
2019-05-07 06:00:00              NaN           61.9             NaN

如何创建从现有列派生的新列?

3590bf2bd35204731efb4588f74e7e3f.png
  • 我想用mg/m33表示伦敦车站的二氧化氮浓度

(我们假设温度为25摄氏度,压力为1013百帕,换算系数为1.882)

In [4]: air_quality["london_mg_per_cubic"] = air_quality["station_london"] * 1.882

In [5]: air_quality.head()
Out[5]: 
                     station_antwerp  station_paris  station_london  london_mg_per_cubic
datetime                                                                                
2019-05-07 02:00:00              NaN            NaN            23.0               43.286
2019-05-07 03:00:00             50.5           25.0            19.0               35.758
2019-05-07 04:00:00             45.0           27.7            19.0               35.758
2019-05-07 05:00:00              NaN           50.4            16.0               30.112
2019-05-07 06:00:00              NaN           61.9             NaN                  NaN

要创建新列,请使用赋值左侧带有新列名称的[]括号。

注意

值的计算是按元素顺序进行的。这意味着给定列中的所有值将同时乘以1.882。您不需要使用循环来迭代每一行!

3590bf2bd35204731efb4588f74e7e3f.png

我想检查巴黎和安特卫普的值的比率,并将结果保存在新的列中

In [6]: air_quality["ratio_paris_antwerp"] = 
   ...:     air_quality["station_paris"] / air_quality["station_antwerp"]
   ...: 

In [7]: air_quality.head()
Out[7]: 
                     station_antwerp  station_paris  station_london  london_mg_per_cubic  ratio_paris_antwerp
datetime                                                                                                     
2019-05-07 02:00:00              NaN            NaN            23.0               43.286                  NaN
2019-05-07 03:00:00             50.5           25.0            19.0               35.758             0.495050
2019-05-07 04:00:00             45.0           27.7            19.0               35.758             0.615556
2019-05-07 05:00:00              NaN           50.4            16.0               30.112                  NaN
2019-05-07 06:00:00              NaN           61.9             NaN                  NaN                  NaN

计算同样是按元素进行的,因此对每一行中的值应用/

还有其他数学运算符(+ ,-,* ,/)或逻辑运算符(< ,> ,= ,...)。后者已经在子集数据教程subset data tutorial中用于使用条件表达式过滤表中的行。

  • 我想将数据列重命名为 openAQ 使用的相应站点标识符
In [8]: air_quality_renamed = air_quality.rename(
   ...:     columns={"station_antwerp": "BETR801",
   ...:              "station_paris": "FR04014",
   ...:              "station_london": "London Westminster"})
   ...:
In [9]: air_quality_renamed.head()
Out[9]: 
                     BETR801  FR04014  London Westminster  london_mg_per_cubic  ratio_paris_antwerp
datetime                                                                                           
2019-05-07 02:00:00      NaN      NaN                23.0               43.286                  NaN
2019-05-07 03:00:00     50.5     25.0                19.0               35.758             0.495050
2019-05-07 04:00:00     45.0     27.7                19.0               35.758             0.615556
2019-05-07 05:00:00      NaN     50.4                16.0               30.112                  NaN
2019-05-07 06:00:00      NaN     61.9                 NaN                  NaN                  NaN

The rename() function can be used for both row labels and column labels. Provide a dictionary with the keys the current names and the values the new names to update the corresponding names.

rename()函数可用于行标签和列标签。提供一个包含键、当前名称和新名称值的字典,以更新相应的名称。

映射不应该仅限于固定名称,也可以是一个映射函数。例如,将列名转换为小写字母也可以使用一个函数来完成:

In [10]: air_quality_renamed = air_quality_renamed.rename(columns=str.lower)

In [11]: air_quality_renamed.head()
Out[11]: 
                     betr801  fr04014  london westminster  london_mg_per_cubic  ratio_paris_antwerp
datetime                                                                                           
2019-05-07 02:00:00      NaN      NaN                23.0               43.286                  NaN
2019-05-07 03:00:00     50.5     25.0                19.0               35.758             0.495050
2019-05-07 04:00:00     45.0     27.7                19.0               35.758             0.615556
2019-05-07 05:00:00      NaN     50.4                16.0               30.112                  NaN
2019-05-07 06:00:00      NaN     61.9                 NaN                  NaN                  NaN

关于重命名标签的用户指南部分提供了有关列或行标签重命名renaming labels.的详细信息。

记住

  • 方法[]之间使用新的列名将输出分配给 DataFrame,从而创建一个新列。
  • 操作是按元素进行的,不需要循环遍历行。
  • 使用rename名字典或函数来重命名行标签或列名。

使用指南column addition and deletion.

用户指南包含一个单独的栏添加和删除部分。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值