3.2 Pandas基本操作

本节来介绍对创建的DataFrame的索引、行和列执行基本操作:添加、删除、重命名

一、添加Pandas DataFrame的索引、行或列

1. 添加DataFrame的索引

创建DataFrame时,可以选择向“index”参数添加输入,以确保您拥有所需的索引。如果不指定此选项,默认情况下,DataFrame将具有以0开头的数值索引并一直持续到DataFrame的最后一行的值。

但是,即使自动为设置了索引,我们仍然可以重新使用其中一个列并将其作为索引。您可以通过调用set_index() 轻松完成此操作。看看下面的代码

import numpy as np import pandas as pd data = np.array([['', 'A', 'B', 'C'], ['0', 1, 2, 3], ['1', 4, 5, 6], ['2', 7, 8, 9]]) df = pd.DataFrame(data=data[1:, 1:], index=data[1:, 0], columns=data[0, 1:]) print(df, "\n") # 设置名称为"C"这列作为DataFrame的index df = df.set_index('C') print(df)

输出如下:

   A  B  C
0  1  2  3
1  4  5  6
2  7  8  9 

   A  B
C      
3  1  2
6  4  5
9  7  8

2. 添加DataFrame的行

在添加行之前,需要先理解.iloc[].loc[]的区别:

import numpy as np import pandas as pd df = pd.DataFrame(data=np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), index=[2.5, 12.6, 4.8], columns=[48, 49, 50]) # 修改位置为2的那行 df.iloc[2] = [60, 50, 40] print(df, "\n") # 修改或添加标签为2的那行 df.loc[2] = [11, 12, 13] print(df)

运行后输出:

      48  49  50
2.5    1   2   3
12.6   4   5   6
4.8   60  50  40 

      48  49  50
2.5    1   2   3
12.6   4   5   6
4.8   60  50  40
2.0   11  12  13

注意:

3. 添加DataFrame的列

在某些情况下,您希望将索引作为DataFrame的一部分。您可以通过从DataFrame中获取列或通过引用尚未创建的列并将其分配给.index属性来轻松完成此操作,如下所示:

import numpy as np import pandas as pd df = pd.DataFrame(data=np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), columns=['A', 'B', 'C']) print(df.index) # 添加列,名称为"D" df['D'] = df.index print(df)

输出如下:

RangeIndex(start=0, stop=3, step=1)
   A  B  C  D
0  1  2  3  0
1  4  5  6  1
2  7  8  9  2

代码df['D'] = df.index的意思是将添加新的一行,列好为’D’,数据为df.index

二、删除Pandas DataFrame的索引、行或列

上面已经了解了如何选择并向DataFrame添加索引、行和列,下面来实现从数据结构中删除这三个用例。

1. 删除DataFrame的索引

因为DataFrames和Series始终具有索引,所以要从DataFrame中删除索引,可以考虑这几种方式:

重置DataFrame的索引

DataFrame的索引我们可以执行此操作.reset_index()进行重置。

import numpy as np import pandas as pd df = pd.DataFrame(data=np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), index=[2.5, 12.6, 4.8], columns=['A', 'B', 'C']) print("重置前:\n", df) # 使用reset_index()重置行标签 df_reset = df.reset_index(level=0, drop=True) print("\n重置后:\n", df_reset)

输出如下:

重置前:
       A  B  C
2.5   1  2  3
12.6  4  5  6
4.8   7  8  9

重置后:
    A  B  C
0  1  2  3
1  4  5  6
2  7  8  9

现在尝试在上面的代码块中替换drop参数inplace,看看会发生什么!

重置索引并删除重复的索引值

删除重复的索引值需要使用drop_duplicates()函数操作。代码如下:

import numpy as np import pandas as pd df = pd.DataFrame(data=np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [40, 50, 60], [23, 35, 37]]), index=[2.5, 12.6, 4.8, 4.8, 2.5], columns=[48, 49, 50]) print("df:\n", df) # 使用drop_duplicates删除重复的行标签 df2 = df.reset_index().drop_duplicates(subset='index', keep='last') print("\ndf2:\n", df2)

输出后:

df:
       48  49  50
2.5    1   2   3
12.6   4   5   6
4.8    7   8   9
4.8   40  50  60
2.5   23  35  37

df2:
    index  48  49  50
1   12.6   4   5   6
3    4.8  40  50  60
4    2.5  23  35  37

可以看到重复的行标签有2.5、4.8,最后他们一样的值只保留了最后一个。现在您已了解如何从DataFrame中删除索引,接下来就是删除列和行了。

2. 删除DataFrame的列

要从DataFrame中删除列,可以使用以下drop()方法:

import numpy as np import pandas as pd df = pd.DataFrame(data=np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), index=[2.5, 12.6, 4.8], columns=['A', 'B', 'C']) print("删除前:\n", df) # 删除标签是“A”的列 df.drop('A', axis=1, inplace=True) print("删除后:\n", df)

运行后输出:

删除前:
       A  B  C
2.5   1  2  3
12.6  4  5  6
4.8   7  8  9
删除后:
       B  C
2.5   2  3
12.6  5  6
4.8   8  9

drop()的参数:

3. 删除DataFrame行

可以通过执行从DataFrame中删除重复的行df.drop_duplicates(),和上面的"重置索引并删除重复的索引值"的效果一样。

另外还可以使用drop()方法,示例代码如下:

import numpy as np import pandas as pd df = pd.DataFrame(data=np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [23, 50, 60], [23, 35, 37]]), index=[2.5, 12.6, 4.8, 4.8, 2.5], columns=[48, 49, 50]) print("删除前:\n", df) # 删除指定的位置 df.drop(df.index[2], inplace=True) print("\n删除后:\n", df) # 删除指定的行标签 df.drop(12.6, axis=0, inplace=True) print("\n删除后:\n", df)

运行后输出:

删除前:
       48  49  50
2.5    1   2   3
12.6   4   5   6
4.8    7   8   9
4.8   23  50  60
2.5   23  35  37

删除后:
       48  49  50
2.5    1   2   3
12.6   4   5   6
2.5   23  35  37

删除后:
      48  49  50
2.5   1   2   3
2.5  23  35  37

从结果可以知道:

三、重命名Pandas DataFrame的索引、列

要为DataFrame的列或索引赋予不同的值,最好使用.rename()方法。

import numpy as np import pandas as pd data = np.array([['', 'A', 'B', 'C'], ['0', 1, 2, 3], ['1', 4, 5, 6], ['2', 7, 8, 9]]) df = pd.DataFrame(data=data[1:, 1:], index=data[1:, 0], columns=data[0, 1:]) print("原始数据:\n", df) # 定义列的新名称 newcols = { 'A': 'new_column_1', 'B': 'new_column_2', 'C': 'new_column_3' } # 使用rename()重命名列名称 df.rename(columns=newcols, inplace=True) print("\n重命名列名称:\n", df) # 使用rename()重命名索引 df.rename(index={'1': 'new_index_1'}, inplace=True) print("\n重命索引标签:\n", df)

运行后输出:

原始数据:
    A  B  C
0  1  2  3
1  4  5  6
2  7  8  9

重命名列名称:
   new_column_1 new_column_2 new_column_3
0            1            2            3
1            4            5            6
2            7            8            9

重命索引标签:
             new_column_1 new_column_2 new_column_3
0                      1            2            3
new_index_1            4            5            6
2                      7            8            9

rename()函数的参数:

若有疑问,欢迎联系作者(微信:lixu1770105)。