Bootstrap

带你从入门到精通——Python数据处理(七. Pandas中数据的增删改查)

建议先阅读我之前的Python数据处理以及Python专栏中的博客,掌握一定的Python前置知识后再阅读本文,链接如下:

Python_梦想是成为算法高手的博客-CSDN博客

带你从入门到精通——Python数据处理(一. 环境介绍与NumPy入门)-CSDN博客

带你从入门到精通——Python数据处理(二. NumPy中数组的基本操作)-CSDN博客

带你从入门到精通——Python数据处理(三. NumPy中数组的运算)-CSDN博客

带你从入门到精通——Python数据处理(四. Pandas入门)-CSDN博客

带你从入门到精通——Python数据处理(五. Pandas常用操作)-CSDN博客

带你从入门到精通——Python数据处理(六. Pandas中文件的读写操作)-CSDN博客

目录

七. Pandas中数据的增删改查

7.1 数据的增加

7.1.1 直接赋值

7.1.2 assign函数

7.2 数据的删除与去重

7.2.1 数据的删除

7.2.2 数据的去重

7.3 数据的修改

7.4 数据的查询

7.4.1 查询列

7.4.2 查询行

7.4.3 rank函数


七. Pandas中数据的增删改查

7.1 数据的增加

7.1.1 直接赋值

        可以通过直接赋值的方式为DataFrame对象增加一列,具体示例和输出结果如下:

import pandas as pd
df = pd.DataFrame([[1, 2, 'a'], [4, 5, 'b'], [7, 8, 'c']], 
                  columns=['col1', 'col2', 'col3'], index=['row1', 'row2', 'row3'])
df['col4'] = 6
df

        如果直接使用一个数为DataFrame对象赋值,则新增的一列全为这一个数

        还可以直接使用一列数据为DataFrame对象赋值,该列数据的行数需要与DataFrame对象的行数相同,具体示例和输出结果如下:

import pandas as pd
df = pd.DataFrame([[1, 2, 'a'], [4, 5, 'b'], [7, 8, 'c']], 
                  columns=['col1', 'col2', 'col3'], index=['row1', 'row2', 'row3'])
df['col4'] = 6
df['col5'] = ['d', 'e', 'f']
df['col6'] = df['col1'] * 10
df

        注意:使用直接赋值的方法为DataFrame对象增加列时,直接在原DataFrame对象上进行添加。

7.1.2 assign函数

        可以使用DataFrame对象的assign函数,为DataFrame对象增加列,具体使用方法和输出结果如下:

import pandas as pd
df = pd.DataFrame([[1, 2, 'a'], [4, 5, 'b'], [7, 8, 'c']], 
                  columns=['col1', 'col2', 'col3'], index=['row1', 'row2', 'row3'])
s = pd.Series([10, 15, 20], index=['row1', 'row2', 'row3'])
df = df.assign(col4=6, col5=['d', 'e', 'f'], col6=s)
df

        注意:assign函数的形参即为新的列名,且不能加引号,实参可以传入一个数、一个列表或者一个Series对象(Series对象的行索引必须与DataFrame对象一致,否则会添加一列的NaN值)。

        此外,assign函数的实参还可以是一个函数名,具体使用方法和输出结果如下:

import pandas as pd
df = pd.DataFrame([[1, 2, 'a'], [4, 5, 'b'], [7, 8, 'c']], 
                  columns=['col1', 'col2', 'col3'], index=['row1', 'row2', 'row3'])

# 该自定义函数必须设置一个参数用于接收DataFrame对象
# 当一个DataFrame对象调用assign方法时,会自动将该DataFrame对象本身传入该自定义函数
# 该自定义函数的返回值可以为:
# 1.单个数 
# 2.一组数量和DataFrame对象行数相同的数据,可以为列表、数组等 
# 3.和DataFrame对象有着相同索引的Series对象
def func(df):
    ret = df.index
    return ret
df = df.assign(col4=lambda x:1, col5=func)
df

        注意:assign函数会返回一个新的DataFrame对象。

7.2 数据的删除与去重

7.2.1 数据的删除

        可以使用DataFrame对象drop方法删除数据,该方法的第一个参数接收一个列表,用于指定需要删除数据的索引值或者列名,axis参数用于指定删除行或列,默认axis=0即删除对应行,如果指定axis=1这删除对应列,具体使用方法和输出结果如下:

import pandas as pd
df = pd.DataFrame([[1, 2, 'a'], [1, 2, 'a'], [2, 4, 'c']], 
                  columns=['col1', 'col2', 'col3'], index=['row1', 'row2', 'row3'])

df = df.drop(['row1', 'row2'])
df

        此外,还可以使用del关键字来删除列,但此方法是直接修改原始的DataFrame对象,而使用drop方法会返回一个新的DataFrame对象,具体使用方法和输出结果如下:

import pandas as pd
df = pd.DataFrame([[1, 2, 'a'], [1, 2, 'a'], [2, 4, 'c']], 
                  columns=['col1', 'col2', 'col3'], index=['row1', 'row2', 'row3'])

del df['col1']
df

        注意:如果使用del关键字来删除列一次只能删除一列数据。

7.2.2 数据的去重

        DataFrame对象和Series对象都可以使用drop_duplicates方法进行行去重,该方法会保留原始的索引,此外,Series对象还可以使用unique方法进行行去重,但是unique方法会返回去重后的ndarray数组(即不包含索引列),而drop_duplicates方法会返回DataFrame对象或者Series对象,具体使用方法和输出结果如下:

import pandas as pd
df = pd.DataFrame([[1, 2, 'a'], [1, 2, 'a'], [2, 4, 'c']], 
                  columns=['col1', 'col2', 'col3'], index=['row1', 'row2', 'row3'])

df.drop_duplicates()

import pandas as pd
df = pd.DataFrame([[1, 2, 'a'], [1, 2, 'a'], [2, 4, 'c']], 
                  columns=['col1', 'col2', 'col3'], index=['row1', 'row2', 'row3'])

df['col1'].unique()

7.3 数据的修改

        首先可以使用上文介绍过的直接赋值或者assign函数的方法进行数据的修改,具体使用细节和方法与数据的增加一致,只是增加数据时指定的列名需要与原DataFrame对象中已经存在的其他列的列名不一致,而修改数据时只需要指定原DataFrame对象中已经存在的一列的列名即可进行修改操作。

        此外,还可以使用replace函数进行数据的修改,具体使用方法和输出结果如下:

import pandas as pd
df = pd.DataFrame([[1, 2, 'a'], [1, 2, 'a'], [2, 4, 'c']], 
                  columns=['col1', 'col2', 'col3'], index=['row1', 'row2', 'row3'])

df.replace(1, 10, inplace=True)
df

        replace函数的前两个参数被替换值和替换值,该函数会对DataFrame对象的所有值进行匹配并将所有的被替换值替换为替换值,inplace参数可以指定是否在原DataFrame对象上进行数据修改,默认为False即返回一个新的DataFrame对象,如果指定该参数为False则直接在原DataFrame对象上进行数据修改。

7.4 数据的查询

7.4.1 查询列

        可以使用如下方法进行一列或者多列的查询:

import pandas as pd
df = pd.DataFrame([[1, 2, 'a'], [1, 2, 'a'], [2, 4, 'c']], 
                  columns=['col1', 'col2', 'col3'], index=['row1', 'row2', 'row3'])

print(df.col1) # 查询一列, 使用该方法查询列时,列名中不能含有空格
print(df['col2']) # 查询一列
print(df[['col1', 'col2']]) # 查询多列

7.4.2 查询行

        进行行查询时,通常使用行索引下标切片进行查询,示例和输出结果如下:

import pandas as pd
df = pd.DataFrame([[1, 2, 'a'], [1, 2, 'a'], [2, 4, 'c']], 
                  columns=['col1', 'col2', 'col3'], index=['row1', 'row2', 'row3'])

df[0:1]

7.4.3 rank函数

        DataFrame对象和Series对象都可以使用rank函数,该函数返回Series对象或者DataFrame对象中数据的行排名或列排名(排名值为浮点数)

        rank函数包含有如下6个参数:

        axis:用于指定沿着哪个轴计算排名,默认为0即按行计算排名,如设置axis=1,则按列计算排名。

        numeric_only:用于指定是否仅计算数字类型数据的排名,默认为False,如果设置numeric_only=True,则会丢弃有非数字类型数据的行或列后,再进行排名。

        na_option:用于指定NaN值是否参与排序以及如何排序,可以使用如下参数:

                'keep':NaN值不参与排序,并保留在原有位置。

                'top':NaN值参与排序,并全部排在最前边。

                'tbottom':NaN值参与排序,并全部排在最后边。

        ascending:用于指定升序排序还是降序排序,默认为True,即升序排序。

        pct:用于指定是否以对排名值进行归一化,默认False,即不进行归一化。

        method:用于指定排名值的计算方式,可以使用如下参数:

                'average':'average'为method参数的默认值,该计算方式中的排名值不连续,如果遇到相同数值,它们的排名值相同,都为它们排名名次的平均值

                'min':该计算方式中的排名值不连续,如果遇到相同数值,它们的排名值相同,都为它们排名名次的最小值

                'max':该计算方式中的排名值不连续,如果遇到相同数值,它们的排名值相同,都为它们排名名次的最大值

                'dense':该计算方式中的排名值连续,如果遇到相同数值,它们的排名值相同,都为它们排名名次的最大值

;