pandas如何给DataFrame新增列并赋值

 更新时间:2024年02月02日 08:45:25   作者:S_o_l_o_n  
这篇文章主要介绍了pandas如何给DataFrame新增列并赋值问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

pandas给DataFrame新增列并赋值

 给DataFrame新增列的话,除了join,merge,concat这些函数之外,还可以通过简单的df['new_column']=values的形式对其新增列,但是在使用这种方式新增列时,需要注意索引问题以及新增多列时该如何操作。

索引问题

这个问题只有在等号右边的对象是Series或者DataFrame时需要注意,因为这时等号右边的对象是有索引的,这样赋值时,要保证新增对象的索引和左边对象的索引一致,不然也只会保存一致的索引对应的值,其他的值为NaN。当然,对于新增一列的情形,可以直接在等号右边以列表或者ndarray等没有索引的可迭代对象赋值,从而避免索引问题。但是对于新增多列的情形,就不能用这种方式避免索引问题的,具体原因如下。

新增多列的简单方式

新增多列时,这里讲的时上述的简单赋值方式,而不是利用join,merge,concat等这些函数去实现。不同于新增一列,新增一列可以直接用df['new_col']=values的方式,新增多列时,需要用df[['col1','col2',...]]=values的方式,里面需要用列表包含多个新增的列名,此外更重要的是,这时的values必须得是DataFrame,往往我们容易想当然的以为这时values也可以是ndarray或者list等对象,但实际则不然,其必须得是DataFrame,所以这时也一定要考虑索引问题;当然,其实完全可以实现和新增一列相同的形式,即values也可以是其他对象,这里之所以这样要求其必须是DataFrame,只是一种规定而已,似乎并没有其他合理的理由。

其他需要注意的点以及小结

1、df[['col']]索引得到的对象是一个DataFrame,不再是一个Series,所以要对其新增列,右边的对象也应该是DataFrame;

2、不能用loc或者iloc进行新增列的赋值;

3、所以新增单列,用df['col']=values的方式,values可以为Series,list或ndarray等对象,或者也可以用df[['col']]=values,values必须为DataFrame;新增多列用df[['col1','col2',...]]=values,values必须为DataFrame;当values为Series或者DataFrame时,需要注意索引问题。

DataFrame处理数据——列处理

首先导入pandas库,创建一个数据框对象。

import pandas as pd
data = pd.DataFrame()

一、插入数据为列

将数据以列表或者Series对象的形式传给data,列名为“col_1”,可自己定义

data["col_1"] = ["2023-01-01", "2023-02-05", "2023-03-14", "2023-12-31", "2023-05-06"]

二、新增或修改列

增加一个列名为“today”的列

from datetime import datetime as dt
data["today"] = dt.today()

将col_1列修改为日期格式,这样才能进行日期运算

data["col_1"] = pd.to_datetime(data["col_1"])

三、对整列进行运算

用today列减去col_1列,生成col_2列

data["col_2"] = data["today"] - data["col_1"]

不过这样处理得到的差值数据类型是datetime库里的Timedelta对象,在数据分析中这样的数据类型意义不大,需要调用Timedelta的属性来提取具体的天数差,操作见第四节。

四、用函数对列中的每个值进行处理

用来处理的函数如果较为简单,可以使用如下方法,在apply方法中用lambda定义函数,其中x表示被处理的对象,在下面的代码中对应的是col_2这个Series中的每个“时间差”对象(Timedelta),用“.days”来访问天数属性,将时间差转换成天数(数据类型也会相应地变成整型)。

data["col_2"] = data["col_2"].apply(lambda x: x.days)

处理数据的函数如果比较复杂,也可以先定义函数,再对数据进行处理,定义的函数中第一个参数默认为数据框传入的值,如果有多个参数,在调用apply时要用args后加可迭代对象(如列表,元组)包裹起来,传入的实参与函数中的形参位置一一对应。

需要注意的是,将函数传入apply时不需要加括号。

def get_date_format(x, y):
    x = dt.strftime(x, y)
    return x
 
data["col_3"] = data["col_1"].apply(get_date_format, args=["%Y年%m月%d日"])

五、选择自己需要的列

方法比较简单,不过多赘述,直接上代码:

data = data[["col_2", "col_3"]]

六、修改列名

方法比较简单,不过多赘述,直接上代码:

data.rename(columns={"col_2":"天数差", "col_3":"日期"}, inplace=True)
 
# 也可以用以下方法,修改全部列名
columns = ["原日期", "今天", "天数差", "修改后日期"]
data.columns = columns
inplace=True表示在该对象上直接修改

七、删除列

方法比较简单,不过多赘述,直接上代码:

data.drop(["原日期", "今天"], axis=1, inplace=True)

列表中的值表示列名,执行上方代码,会删除“原日期”和“今天”这两个列。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python列表常见操作详解(获取,增加,删除,修改,排序等)

    Python列表常见操作详解(获取,增加,删除,修改,排序等)

    这篇文章主要介绍了Python列表常见操作,结合实例形式总结分析了Python列表常见的获取、增加、删除、修改、排序、计算等相关操作技巧,需要的朋友可以参考下
    2019-02-02
  • 使用Python实现惰性加载的三种方法详解

    使用Python实现惰性加载的三种方法详解

    在现代软件开发中,惰性加载是一种优化技术,用于延迟计算或加载资源密集型属性,直至首次访问时才执行,Python提供了丰富的元类与属性操作机制,允许我们通过getattr、getattribute和setattr方法实现惰性属性管理,本文将详细探讨这三种方法的实现细节,需要的朋友可以参考下
    2025-10-10
  • Python判断字符串是否xx开始或结尾的示例

    Python判断字符串是否xx开始或结尾的示例

    今天小编就为大家分享一篇Python判断字符串是否xx开始或结尾的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • selenium+python自动化测试之使用webdriver操作浏览器的方法

    selenium+python自动化测试之使用webdriver操作浏览器的方法

    这篇文章主要介绍了selenium+python自动化测试之使用webdriver操作浏览器的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • python实现每次处理一个字符的三种方法

    python实现每次处理一个字符的三种方法

    这篇文章主要介绍了python实现每次处理一个字符的三种方法,是非常实用的字符串操作技巧,需要的朋友可以参考下
    2014-10-10
  • Python使用itertools模块实现排列组合功能示例

    Python使用itertools模块实现排列组合功能示例

    这篇文章主要介绍了Python使用itertools模块实现排列组合功能,涉及Python基于itertools模块product、permutations与combinations_with_replacement方法进行排列、组合等相关操作实现技巧,需要的朋友可以参考下
    2018-07-07
  • 使用Python实现Excel表格转图片

    使用Python实现Excel表格转图片

    在数据处理与信息分享过程中,Excel表格作为一种强大的数据管理工具被广泛应用,这篇文章主要为大家详细介绍了如何使用Python将Excel表格转换为图片,需要的可以参考下
    2024-04-04
  • python基于socketserver实现并发,验证客户端的合法性

    python基于socketserver实现并发,验证客户端的合法性

    TCP协议的socket一次只能和一个客户端通信, 而socketsever可以时间和多个客户端通信。本文将讲解socketserver的具体使用
    2021-05-05
  • Pytorch随机数生成常用的4种方法汇总

    Pytorch随机数生成常用的4种方法汇总

    随机数广泛应用在科学研究,但是计算机无法产生真正的随机数,一般成为伪随机数,下面这篇文章主要给大家介绍了关于Pytorch随机数生成常用的4种方法,需要的朋友可以参考下
    2023-05-05
  • Python基于进程池实现多进程过程解析

    Python基于进程池实现多进程过程解析

    这篇文章主要介绍了Python基于进程池实现多进程过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04

最新评论