DataFrame添加列的多个方面详解

一、添加单列

1、使用赋值语句添加新列

在pandas中,可以使用赋值语句为DataFrame添加新列。例如,创建一个包含“name”和“age”两列的DataFrame:


import pandas as pd
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35]})

现在,我们想要添加一个新列“gender”。可以直接用赋值语句为df添加新列:


df['gender'] = ['F', 'M', 'M']
print(df)

输出结果为:

      name  age gender
0    Alice   25      F
1      Bob   30      M
2  Charlie   35      M

2、使用insert()方法添加新列

另外一种添加新列的方式是使用pandas.DataFrame.insert()方法。该方法允许在DataFrame的指定位置插入一个新的列。例如,在上面的例子中,我们可以在“age”列后面插入一个新的名为“gender”的列:


df.insert(2, 'gender', ['F', 'M', 'M'])
print(df)

输出结果与前面的示例代码相同。

二、添加多列

1、使用赋值语句添加多列

对于需要添加多列的情况,使用赋值语句也很方便。例如,现在我们希望在之前的DataFrame上同时添加“height”和“weight”两列。


df['height'] = [165, 175, 180]
df['weight'] = [50, 70, 85]
print(df)

输出结果如下:

      name  age gender  height  weight
0    Alice   25      F     165      50
1      Bob   30      M     175      70
2  Charlie   35      M     180      85

2、使用concat()方法添加多列

pandas提供了一个名为“concat”的函数,可以沿着指定的轴连接多个DataFrame或Series对象。


df_height = pd.DataFrame([165, 175, 180], columns=['height'])
df_weight = pd.DataFrame([50, 70, 85], columns=['weight'])

df = pd.concat([df, df_height, df_weight], axis=1)
print(df)

注意,在使用concat()方法连接时,需要指定axis=1,表示沿着列的方向连接。如果指定axis=0,则表示沿着行方向连接。

三、利用apply()方法添加新列

1、使用apply()方法根据行数据生成新列

apply()方法可以接受一个函数作为参数,该函数将由DataFrame或者Series的每一行数据调用,返回一个值,这个值就会作为新的一列添加到DataFrame或Series中。以下是一个示例:


def calculate_bmi(row):
    height = row['height'] / 100
    weight = row['weight']
    bmi = weight / (height ** 2)
    return round(bmi, 1)

df['bmi'] = df.apply(calculate_bmi, axis=1)
print(df)

输出结果如下:

      name  age gender  height  weight   bmi
0    Alice   25      F     165      50  18.4
1      Bob   30      M     175      70  22.9
2  Charlie   35      M     180      85  26.2

上述代码中,我们定义了一个函数calculate_bmi(),接受DataFrame的每一行作为参数,然后根据“height”和“weight”列计算bmi指数。

2、使用apply()方法根据列数据生成新列

另外一种使用apply()方法添加新列的方式是根据某一列的数据生成新列。例如,现在我们想要在DataFrame上添加一个新的列,表示每个人的性别是否为“Male”,可以按照以下方式实现:


def gender_to_number(gender):
    return 1 if gender == 'M' else 0

df['is_male'] = df['gender'].apply(gender_to_number)
print(df)

输出结果如下:

      name  age gender  height  weight   bmi  is_male
0    Alice   25      F     165      50  18.4        0
1      Bob   30      M     175      70  22.9        1
2  Charlie   35      M     180      85  26.2        1

上述代码中,我们定义了一个函数gender_to_number(),接受“gender”列中的每个值作为参数,如果为“M”则返回1,否则返回0。然后使用apply()方法将该函数应用于“gender”列,生成新的“is_male”列。

四、结合其他函数批量修改列名

在处理一些大型的数据集时,可能需要对列名称进行批量修改。pandas提供了一些方法可以方便地修改列名。

1、使用rename()方法修改列名

rename()方法可以接受一个字典对象,可以将DataFrame的某些列名称修改为指定名称。


df = df.rename(columns={'name': 'Name', 'age': 'Age'})
print(df)

上述代码将“name”列的名称修改为“Name”,将“age”列的名称修改为“Age”。

2、使用map()方法修改列名

map()方法可以接受一个函数作为参数,该函数将对DataFrame的每个列名称进行调用,返回新的列名称。


def add_prefix(col_name):
    return 'PERSON_' + col_name.upper()

df = df.rename(columns=add_prefix)
print(df)

上述代码中,我们定义了一个函数add_prefix(),该函数将DataFrame的每个列名称前面添加“PERSON_”前缀。然后使用rename()方法调用该函数,生成新的列名称。

五、使用assign()方法添加新列

assign()方法可以添加新列到DataFrame中,同时可以进行链式操作。

1、添加单列


df = df.assign(bmi_class=df['bmi'].apply(lambda x: 'Underweight' if x < 18.5 else 'Normal' if x < 25 else 'Overweight'))
print(df)

上述代码中,我们使用assign()方法添加了一个名为“bmi_class”的新列,值为根据“bmi”列计算得出的标准分类结果。

2、添加多列


df = df.assign(
    bmi_class=df['bmi'].apply(lambda x: 'Underweight' if x < 18.5 else 'Normal' if x < 25 else 'Overweight'),
    name_len=df['Name'].apply(lambda x: len(x))
)
print(df)

上述代码中,我们使用assign()方法同时添加了两个新列。

六、结语

在本文中,我们详细阐述了在pandas中如何添加新列到DataFrame中。针对不同场景,我们介绍了多种添加新列的方法,包括使用赋值语句、使用concat()方法、使用apply()方法和使用assign()方法等。此外,我们还介绍了如何结合其他函数批量修改列名。掌握了这些知识点,读者可以更加灵活地应对数据处理中的各种情况。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/287007.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-23 13:07
下一篇 2024-12-23 13:07

相关推荐

  • 为什么Python不能编译?——从多个方面浅析原因和解决方法

    Python作为很多开发人员、数据科学家和计算机学习者的首选编程语言之一,受到了广泛关注和应用。但与之伴随的问题之一是Python不能编译,这给基于编译的开发和部署方式带来不少麻烦…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • Python合并多个相同表头文件

    对于需要合并多个相同表头文件的情况,我们可以使用Python来实现快速的合并。 一、读取CSV文件 使用Python中的csv库读取CSV文件。 import csv with o…

    编程 2025-04-29
  • 从多个方面用法介绍yes,but let me review and configure level of access

    yes,but let me review and configure level of access是指在授权过程中,需要进行确认和配置级别控制的全能编程开发工程师。 一、授权确…

    编程 2025-04-29
  • 从多个方面zmjui

    zmjui是一个轻量级的前端UI框架,它实现了丰富的UI组件和实用的JS插件,让前端开发更加快速和高效。本文将从多个方面对zmjui做详细阐述,帮助读者深入了解zmjui,以便更好…

    编程 2025-04-28
  • 学Python用什么编辑器?——从多个方面评估各种Python编辑器

    选择一个适合自己的 Python 编辑器并不容易。除了我们开发的应用程序类型、我们面临的软件架构以及我们的编码技能之外,选择编辑器可能也是我们编写代码时最重要的决定之一。随着许多不…

    编程 2025-04-28
  • 使用easypoi创建多个动态表头

    本文将详细介绍如何使用easypoi创建多个动态表头,让表格更加灵活和具有可读性。 一、创建单个动态表头 easypoi是一个基于POI操作Excel的Java框架,支持通过注解的…

    编程 2025-04-28
  • 创建列表的多个方面

    本文将从多个方面对创建列表进行详细阐述。 一、列表基本概念 列表是一种数据结构,其中元素以线性方式组织,并且具有特殊的序列位置。该位置可以通过索引或一些其他方式进行访问。在编程中,…

    编程 2025-04-28
  • Python多个sheet表合并用法介绍

    本文将从多个方面对Python多个sheet表合并进行详细的阐述。 一、xlrd与xlwt模块的基础知识 xlrd与xlwt是Python中处理Excel文件的重要模块。xlrd模…

    编程 2025-04-27
  • 从多个角度用法介绍lower down

    lower down是一个常用于编程开发中的操作。它可以对某个值或变量进行降低精度的处理,非常适合于一些需要精度不高但速度快的场景。那么,在本文中,我们将从多个角度解析lower …

    编程 2025-04-27

发表回复

登录后才能评论