Press "Enter" to skip to content

使用Pandas数据框更有效地进行顶级7列操作

在不同方式下执行前7个Pandas列操作的完整指南

Alan在Pixabay上的图片

在数据分析方面,Pandas是最常用的Python库,用于操作和准备数据以进行进一步的分析和机器学习。

事实是,Pandas是一个非常灵活的库,甚至可以用于转换文件格式。

然而,即使我们每天都在使用一些Pandas的功能,我们仍然花费很多时间在Google上搜索如何在Pandas中完成某些任务。

我知道,我抓住你了!

但是让我们诚实一点:有些功能很难记住,可能是因为我们可以用不同的方法达到相同的目标。因此,如果我们每天都在Google相同的事情,也没有什么可羞耻的。

然而,节省时间总是一个好主意。因此,在本文中,我们将介绍7个顶级功能来操作Pandas列。这样你就不再需要Google它们了:你只需要保存本文(或者将其加为书签),并在需要时返回查看。

这里将会介绍以下内容:

目录:如何创建一个新的Pandas列如何向Pandas数据框添加新列如何重命名Pandas列如何删除Pandas列如何在Pandas列中查找唯一值如何将Pandas列转换为列表如何对Pandas数据框按列排序

如何创建一个新的Pandas列

首先,让我们记住Pandas列也被称为Pandas系列。这意味着Pandas数据框是Pandas系列的有序集合。

有几种方法可以创建一个新的Pandas列。让我们看看它们。

将Pandas列创建为Pandas系列

创建一个被认为是“独立存在”的Pandas列的正确方法是使用Pandas系列方法,如下所示:

# 创建一个Pandas系列
series = pd.Series([6, 12, 18, 24])
# 打印Pandas系列
print(series)
>>>  0     6  1    12  2    18  3    24  dtype: int64

我说“正确的方法”,是因为如我们所说,Pandas列是Pandas系列。因此,如果我们只需要一个单独的列,我们应该使用这种方法,如果我们想要“正式正确”。

将Pandas列创建为Pandas数据框

然而,事实是我们很少需要一个单独的列。

因此,创建一个Pandas列的另一种方法是通过创建一个只有一列的新Pandas数据框:这样,我们可以在稍后的时候用其他列来丰富它。

我们可以这样做:

import pandas as pd
# 将Pandas列创建为Pandas数据框
df = pd.DataFrame({'A': [1, 2, 3, 4]})
# 打印Pandas数据框
print(df)
>>>     A  0  1  1  2  2  3  3  4

因此,与前一个示例的区别在于,在这种情况下,Pandas列还具有名称。在这种情况下,我们将其称为“A”。

注意:如果我们仔细观察我们在这里所做的事情,我们可以看到我们可以将Pandas数据框创建为一个字典。实际上,"A"是键,用冒号隔开一个值的列表。然后,键和值都在花括号中。

使用NumPy数组创建一个Pandas数据帧的Pandas列

Pandas的一个超级能力是它可以接受NumPy数组作为输入值。换句话说,我们可以从一个NumPy数组开始创建一个数据帧。

对于单个列,我们可以创建一个一维数组并将其转换为数据帧:这将得到一个只有一列的数据帧。

我们可以这样做:

import numpy as np
import pandas as pd

# 创建一个NumPy数组
values = np.array([5, 10, 15, 20])

# 将数组转换为Pandas数据帧
df = pd.DataFrame(values)

# 打印数据帧
print(df)
# 输出:
#     0
# 0   5
# 1  10
# 2  15
# 3  20

如何向Pandas数据帧添加新列

向Pandas数据帧添加新列的可能性与创建新列有关。

我指的是我们首先需要创建一个Pandas数据帧,然后创建一个单独的Pandas列,然后将该列添加到数据帧中。

在这种情况下,我们有多种可能性进行操作。让我们一一看看。

向Pandas数据帧添加新列:标准方法

向Pandas数据帧添加新列的标准方法是先创建数据帧,然后创建一个单独的列,再将其添加到数据帧中。

我们将在以下所有示例中使用此方法。因此,我们可以这样做:

import pandas as pd

# 创建一个数据帧
df = pd.DataFrame({'A': [1, 2, 3, 4]})

# 通过使用值列表添加新列
df['B'] = [20, 30, 40, 50]

# 打印数据帧
print(df)
# 输出:
#    A   B
# 0  1  20
# 1  2  30
# 2  3  40
# 3  4  50

所以,让我们逐步分析我们所做的事情:

  1. 我们使用pd.DataFrame()方法创建了一个Pandas数据帧。
  2. 我们使用df['B']创建了一个新列,意味着我们将这个新列称为“B”。
  3. 我们使用数字列表给新创建的列赋值。

那么,创建新列的另一种方法是什么?如果我们已经有一个数据帧,我们可以使用数字列表

向Pandas数据帧添加新列:应用函数

使用标准方法向现有数据帧添加新列的功能给我们提供了在一行代码中创建新列并将其添加到现有数据帧的可能性。

例如,假设我们想要创建两个新列作为现有列的组合。我们可以通过将函数应用于现有列来实现:

import pandas as pd

# 创建一个数据帧
df = pd.DataFrame({'A': [1, 2, 3, 4]})

# 创建一个将列A的值加倍的列B
df['B'] = df['A'] * 2

# 应用lambda函数到列A创建列C
df['C'] = df['A'].apply(lambda x: x ** 2)

# 打印数据帧
print(df)
# 输出:
#    A  B   C
# 0  1  2   1
# 1  2  4   4
# 2  3  6   9
# 3  4  8  16

所以,这是我们所做的事情:

  1. 我们创建了一个名为“A”的Pandas列作为数据帧。
  2. 我们通过将列“A”的值加倍来创建列“B”。
  3. 我们通过应用lambda函数到列“A”创建列“C”。在这种情况下,我们的操作是对列“A”的值进行平方。

所有这些列都存储在一个唯一的数据帧中。

向Pandas数据帧添加新列:使用Pandas系列或单个Pandas列

当然,即使列是Pandas系列或Pandas数据帧,我们也可以向Pandas数据帧添加列。

我们可以这样做:

import pandas as pd# 创建数据帧df = pd.DataFrame({'A': [1, 2, 3, 4]})# 使用pd.Series()创建新列values = pd.Series([5, 10, 15, 20]) # 创建系列df['B'] = values # 将系列添加到数据帧作为列# 打印数据帧print(df)>>>   A   B0  1   51  2  102  3  153  4  20

因此,在上述情况下,我们创建了一个Pandas系列,然后通过给它一个名称将其添加到现有的数据帧中。

对于作为Pandas数据帧创建的Pandas列,我们有:

import pandas as pd# 创建数据帧df = pd.DataFrame({'A': [1, 2, 3, 4], 'B': [5, 6, 7, 8]})# 将Pandas列作为数据帧创建df['C'] = pd.DataFrame({'C': [9, 10, 11, 12]})# 打印数据帧print(df)>>>   A  B   C0  1  5   91  2  6  102  3  7  113  4  8  12

就是这样。

注意:当然,如果我们将列创建为NumPy数组,也可以应用相同的方法。我们不会在此处展示该方法,因为“游戏”应该很清楚。

如何重命名Pandas列

重命名Pandas列(一个或多个)是另一个我们需要执行的典型日常任务,但我们经常记不住。

在这种情况下,我们也有不同的方法来完成。让我们看看它们。

如何重命名Pandas列:使用rename()方法

我们可以使用rename()方法来重命名Pandas列,如下所示:

import pandas as pd# 创建数据帧df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})# 重命名单个列df = df.rename(columns={'A': 'NewA'})# 打印数据帧print(df)>>>     NewA  B0     1    41     2    52     3    6

所以,就像我们在使用字典一样。实际上,在rename()方法内部,我们需要传递columns参数,并在大括号内指定实际名称和新名称,用冒号分隔。就像我们在字典中做的那样。

当然,我们可以使用此方法重命名多个列,如下所示:

import pandas as pd# 创建数据帧df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})# 重命名多个列df = df.rename(columns={'A': 'NewA', 'B': 'NewB'})# 打印数据帧print(df)>>>    NewA  NewB0     1     41     2     52     3     6

同样,就像我们使用字典一样。

如何重命名Pandas列:使用列属性

要重命名一个Pandas列(或多个列,如我们将看到的),我们可以使用columns属性,如下所示:

import pandas as pd# 创建DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})# 重命名所有列
df.columns = ['新A', '新B']# 打印数据框
print(df)>>>    新A  新B0   1   41   2   52   3   6

所以,在这种情况下,columns属性给我们提供了使用字符串列表重命名列的可能性。

如何重命名Pandas列:使用set_axis()方法

要重命名一个(或多个)Pandas列,我们可以使用set_axis()方法,如下所示:

import pandas as pd# 创建DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})# 重命名所有列
df.set_axis(['新A', '新B'], axis=1, inplace=True)# 打印数据框
print(df)>>>     新A  新B0   1   41   2   52   3   6

所以,即使在这种情况下,我们使用一个字符串列表来重命名列,但是在这里我们还需要传递参数axis=1inplace=True,因为set_axis()方法从零开始设置轴,所以要重新创建轴。这使得这个方法可以重命名列。

如何使用lambda函数重命名Pandas列

当我们处理Pandas列名时涉及到字符串时,我们可以使用lambda函数来修改文本的字符。

例如,我们可能希望(或需要)通过简单地将字母小写来重命名列。我们可以这样做:

import pandas as pd# 创建DataFrame
df = pd.DataFrame({'COLUMN_1': [1, 2, 3], 'COLUMN_2': [4, 5, 6]})# 使用lambda函数重命名列
df = df.rename(columns=lambda x: x.lower())  # 将列名转为小写# 打印数据框
print(df)>>>      column_1  column_20         1         41         2         52         3         6

这样就完成了。

如何删除Pandas列

删除Pandas列(或多个列)是我们经常需要执行的另一个任务。也许是因为它的值不重要,也许是因为它的值都是NULL或其他原因。

要执行此任务,我们有两种方法。让我们看看它们。

如何删除Pandas列:使用drop()方法

删除Pandas列(或多个列)的典型方法是使用drop()方法。

这里需要记住的唯一一件事是决定是否要删除某些列并创建一个新的数据框,还是要删除它们并替换当前的数据框。

让我展示一下它们的区别:

import pandas as pd# 创建DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})# 删除一个列并替换当前的数据框
df = df.drop('A', axis=1)# 打印更新的数据框
print(df)>>>   B  C0  4  71  5  82  6  9

所以,我们使用drop()方法指定要删除的列的名称和轴(在Pandas中,axis=1表示垂直方向,必须指定)来删除了列“A”。

在这种情况下,我们决定替换数据框df。因此,在过程结束时,数据框df不包含列“A”。

相反,如果我们想创建另一个数据框,假设我们称之为df_2,我们可以这样做:

import pandas as pd# 创建一个数据框df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9], 'D': [10, 11, 12]})# 删除一列并替换当前数据框df_2 = df.drop(['A', 'D'], axis=1)# 打印新数据框print(df_2)>>>   B  C0  4  71  5  82  6  9

所以,在这种情况下,我们删除了两列,并创建了一个只包含列“B”和“C”的新数据框。

如果我们认为将来可能需要原始数据框df进行进一步分析,这可能是有用的。

如何删除Pandas列:使用列索引

在Pandas中,可以通过索引来选择列。这意味着我们可以使用索引来删除它们,如下所示:

import pandas as pd# 创建一个数据框df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9], 'D': [10, 11, 12]})# 删除一列并添加到新数据框df_2 = df.drop(df.columns[[0, 1]], axis=1)# 打印新数据框print(df_2)>>>   C    D0  7   101  8   112  9   12

所以,在这种情况下,我们创建了一个只包含列“C”和“D”的新数据框,并通过使用它们的索引删除了列“A”和“B”。

请记住,在Python中,我们从0开始计数(因此,第一列的索引为0,是列“A”),我们必须说这种方法可能不是最佳选择,如果我们有数十个列,因为我们必须通过计数来找到要删除的列(或列),这可能会出现错误。

如何查找Pandas列中的唯一值

查找Pandas列中的唯一值是我们可能需要每天执行的另一个任务,因为重复的值必须以特定的方式处理。

在这种情况下,我们有两种方法来完成:一种显示一列中的重复项,另一种删除它们。

让我们看看它们两者。

如何查找Pandas列中的唯一值:使用value_counts()方法查找重复项

如果我们想查看Pandas列中是否有重复值,并且还想知道它们有多少个,我们可以使用value_counts()方法,如下所示:

import pandas as pd# 创建一个数据框df = pd.DataFrame({'A': [1, 2, 3, 1, 3], 'B': [4, 5, 6, 7, 8,], 'C': [7, 8, 9, 10, 11]})# 在Pandas列中查找唯一值unique_values = df['A'].value_counts()# 打印唯一值print(unique_values)>>>1    23    22    1Name: A, dtype: int64

所以,这里的结果告诉我们:

  1. 列的名称是“A”,类型都是“int64”。
  2. 我们有两个1。
  3. 我们有两个3。
  4. 我们有一个2。

因此,它向我们显示了值并告诉我们感兴趣的列中有多少个值。

如何在Pandas列中查找唯一值:使用drop_duplicates()方法删除重复项

如果我们想要删除Pandas列中的重复值(因为我们知道其中有重复值),我们可以使用drop_duplicates()方法,如下所示:

import pandas as pd# 创建DataFrame
df = pd.DataFrame({'A': [1, 2, 3, 1, 3], 'B': [4, 5, 6, 7, 8,], 'C': [7, 8, 9, 10, 11]})# 在Pandas列中删除重复值
unique_values = df['A'].drop_duplicates()# 打印唯一值
print(unique_values)>>>0    11   22    3

因此,我们已经从列“A”中删除了重复项,创建了一个名为unique_values的新Pandas列。

如何在Pandas列中查找唯一值:研究数据框

此时,您可能会问:“嗯,如果我有一个有数十列的大数据框,我如何正确知道某些列是否有重复项?”

好问题!我们可以先研究整个数据框。

例如,我们可能希望查看是否有任何列有重复项。我们可以这样做:

import pandas as pd# 创建包含重复项的DataFrame
df = pd.DataFrame({'A': [1, 2, 2, 3, 4, 4], 'B': [5, 6, 6, 7, 8, 8]})# 检查数据框中是否有重复项
has_duplicates = df.duplicated().any()# 打印结果
print(has_duplicates)>>>True

因此,如果存在具有重复项的列,则此代码返回“True”,如果不存在,则返回“False”。

那么,如果我们想要知道实际上具有重复项的列的名称怎么办?我们可以这样做:

import pandas as pd# 创建包含重复项的DataFrame
df = pd.DataFrame({'A': [1, 2, 2, 3, 4, 4], 'B': [5, 6, 6, 7, 8, 8]})# 查找重复行
duplicate_rows = df.duplicated()# 打印重复行
print(df[duplicate_rows])>>>   A  B2  2  65  4  8

因此,上面的代码显示了:

  • 具有重复项的列。
  • 重复项的值。

现在,我们可以进一步使用value_counts()方法进行调查,或使用drop_duplicates()方法删除它们。

如何将Pandas列转换为列表

将Pandas列转换为列表是一个有用的功能,它可以使我们有可能将Pandas列中的所有值“隔离”出来,然后将它们放入一个列表中。然后,我们可以对列表进行任何需要的操作,这很容易管理(迭代等)。

我们有两种可能性来进行此转换。

如何将Pandas列转换为列表:使用list()方法

list()方法是一个内置的Python函数,它将可迭代对象转换为列表。我们可以这样使用:

import pandas as pd# 创建DataFrame
df = pd.DataFrame({'A': [1, 2, 3, 1, 3], 'B': [4, 5, 6, 7, 8,], 'C': [7, 8, 9, 10, 11]})# 将Pandas列转换为列表
column_list = list(df['B'])# 打印列表
print(column_list)>>>[4, 5, 6, 7, 8]

所以,我们很容易地提取了我们的值并将它们放入了一个列表中。

如何将Pandas列转换为列表:使用to_list()方法

为了达到相同的结果,我们可以使用Pandas的to_list()方法。但要注意:它只适用于Pandas版本1.2.0或更高版本

我们可以这样使用它:

import pandas as pd# 创建一个DataFrame
df = pd.DataFrame({'A': [1, 2, 3, 1, 3], 'B': [4, 5, 6, 7, 8,], 'C': [7, 8, 9, 10, 11]})# 将Pandas列转换为列表
column_list = df['B'].to_list()# 打印列表
print(column_list) # >>>[4, 5, 6, 7, 8]

当然,我们得到了与之前相同的结果。

如何对Pandas数据框按列排序

有很多情况下,我们需要对列进行排序。通过排序,我们可以选择按升序或降序的方式对数据进行排序。

我们可以使用以下方法实现这个目标。

如何对Pandas数据框按列排序:使用sort_values()方法

要对Pandas数据框的列进行排序,我们可以使用sort_values()方法,如下所示:

import pandas as pd# 创建一个DataFrame
df = pd.DataFrame({'A': [10, 2, 7, 1, 15], 'B': [4, 2, 6, 28, 8,], 'C': [7, 1, 9, 10, 19]})# 对A列按升序排序
df.sort_values('A', ascending=True, inplace=True)# 打印排序后的数据框
print(df) # >>>    A   B   C3   1  28  101   2   2   12   7   6   90  10   4   74  15   8  19

如我们所见,数据框已按“A”列进行升序排序。实际上,如果我们检查:

  • 在初始数据框中,列“A”中的数字1位于第4个位置。在列“B”中,数字28位于第四个位置。
  • 在排序后的数据框中,列“A”中的数字1位于第一个位置。在列“B”中,数字28位于第一个位置。

因此,我们对数据框进行了排序,但并没有丢失列值之间的关系。

此方法的一个非常有用的功能是,它可以通过将NaNs放在前面来对列进行排序。我们可以像这样做:

import pandas as pd# 创建一个DataFrame
df = pd.DataFrame({'A': [10, 0, 0, 1, 15], 'B': [4, 2, 6, 28, 8,], 'C': [7, 1, 15, 10, 19]})# 将NaN值放在前面进行排序
df.sort_values('A', ascending=True, inplace=True)# 打印排序后的数据框
print(df) # >>>    A   B   C1   0   2   12   0   6  153   1  28  100  10   4   74  15   8  19

就是这样。

如何对Pandas数据框按列排序:使用sort_index()方法

我们也可以按索引值对数据框进行排序,如下所示:

import pandas as pd# 创建一个DataFrame
df = pd.DataFrame({'A': [10, 2, 7, 1, 15], 'B': [4, 2, 6, 28, 8,], 'C': [7, 1, 9, 10, 19]})
# 对DataFrame进行索引排序
df.sort_index(inplace=True)
# 打印排序后的DataFrame
print(df)
>>>    A   B   C
0  10   4   7
1   2   2   1
2   7   6   9
3   1  28  10
4  15   8  19

如我们所见,索引已按升序排列。

结论

在这篇文章中,我们介绍了Pandas列上的前7个常用操作,这些操作我们几乎每天都要执行。

如果您保存了这篇指南,它将帮助您节省很多时间,因为我们以不同的方式执行了相同的任务,这样您就不再需要谷歌搜索它们,从而节省了大量时间。

免费的Python电子书:

开始学习Python数据科学,但遇到困难?订阅我的通讯并获取我的免费电子书:它将为您提供正确的学习路径,帮助您通过实践经验学习Python数据科学。

喜欢这个故事吗?通过我的推荐链接以每月5美元的价格成为VoAGI会员:我将获得一小部分佣金,您无需支付额外费用:

作为VoAGI会员,您的会费的一部分将用于支付您阅读的作家,并且您将获得对每个故事的完全访问权限…

federicotrotta.medium.com

Leave a Reply

Your email address will not be published. Required fields are marked *