python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > pandas数据清洗

Pandas数据清洗函数总结

作者:非常颜色

本文主要介绍了Pandas数据清洗函数总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、drop():删除指定行列

drop()函数用于删除指定行,指定列,同时可以删除多行多列

语法格式

DataFrame.drop(
        self,
        labels=None,
        axis: Axis = 0,
        index=None,
        columns=None,
        level: Level | None = None,
        inplace: bool = False,
        errors: str = "raise",
    )

参数说明

1. 删除指定行

当 axis=0 时,删除指定行

import numpy as np
import pandas as pd

df_obj = pd.DataFrame({'data1': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c'],
                       'data2': [1, 1, 2, 3, 4, 5, 5, 5]},index=list('abcdefgh'))
print(df_obj)
# 删除第一行
df_obj.drop(labels='a', axis=0, inplace=True)
print(df_obj)

运行结果:

在这里插入图片描述

2. 删除指定列

当 axis=1 时,删除指定列

import numpy as np
import pandas as pd

df_obj = pd.DataFrame({'data1': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c'],
                       'data2': [1, 1, 2, 3, 4, 5, 5, 5]}, index=list('abcdefgh'))
print(df_obj)
# 删除data2 
df_obj.drop(labels='data2', axis=1, inplace=True)
print(df_obj)

运行结果:

在这里插入图片描述

二、del():删除指定列

del()函数与drop()函数相比就没有那么灵活了,此操作会对原数据df进行删除,且一次只能删除一列。

语法格式

del df[‘列名']

案例:

import numpy as np
import pandas as pd

df_obj = pd.DataFrame({'data1': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c'],
                       'data2': [1, 1, 2, 3, 4, 5, 5, 5]}, index=list('abcdefgh'))
print(df_obj)
# 删除data1
del df_obj['data1']
print(df_obj)

运行结果:

在这里插入图片描述

三、isnull():判断是否为缺失

判断序列元素是否为缺失(返回与序列长度一样的bool值)

1. 判断是否为缺失

示例代码:

import numpy as np
import pandas as pd

df_obj = pd.DataFrame({'data1': ['a', 'a', 'b', 'b', 'c'],
                       'data2': [1, 2, 3, 4, 5],
                       'data3': np.NaN})
print(df_obj)
print(df_obj.isnull())

运行结果:

在这里插入图片描述

2. 判断哪些列存在缺失

isnull().any()会判断哪些”列”存在缺失值,数据清洗中经常用的小技巧

print(df_obj.isnull().any())

运行结果:

在这里插入图片描述

3. 统计缺失个数

isnull().sum()统计每一列的缺失个数

print(df_obj.isnull().sum())

运行结果:

在这里插入图片描述

四、notnull():判断是否不为缺失

判断序列元素是否不为缺失(返回与序列长度一样的bool值),用法与isnull()相似

print(df_obj.notnull())

运行结果:

在这里插入图片描述

五、dropna():删除缺失值

dropna()函数可以删除缺失值

语法格式:

DataFrame.dropna(
        self,
        axis: Axis = 0,
        how: str = "any",
        thresh=None,
        subset=None,
        inplace: bool = False,
    )

参数说明

1. 导入数据

import numpy as np
import pandas as pd

df_obj = pd.DataFrame({'data1': ['a', 'a', np.NaN, 'b', 'c'],
                       'data2': [1, 2, np.NaN, 4, 5],
                       'data3': np.NaN,
                       'data4': [1, 2, 3, 4, 5]})
print(df_obj)

运行结果:

在这里插入图片描述

2. 删除含有NaN值的所有行

默认 axis=0

print(df_obj.dropna())

运行结果:

在这里插入图片描述

3. 删除含有NaN值的所有列

设置 axis=1 删除列

print(df_obj.dropna(axis=1))

运行结果:

在这里插入图片描述

4. 删除元素都是NaN值的行

设置参数 how="all",只有行一整行数据都是NaN的时候才会删除

print(df_obj.dropna(axis=0,how="all"))

运行结果:由于所有行都有至少有一个有效值,所有都没删除

在这里插入图片描述

5. 删除元素都是NaN值的列

print(df_obj.dropna(axis=1,how="all"))

运行结果:

在这里插入图片描述

6. 删除指定列中含有缺失的行

subset参数设置指定列

# 删除data1列有含有缺失的行
print(df_obj.dropna(subset=["data1"], axis=0))

运行结果:

在这里插入图片描述

六. fillna():缺失值填充

缺失值填充

语法格式

fillna(
        self,
        value: object | ArrayLike | None = None,
        method: FillnaOptions | None = None,
        axis: Axis | None = None,
        inplace: bool = False,
        limit=None,
        downcast=None,
    ) -> DataFrame | None

参数说明

1. 导入数据

import numpy as np
import pandas as pd

df_obj = pd.DataFrame({'data1': ['a', 'a', np.NaN, 'b', 'c'],
                       'data2': [1, 2, np.NaN, 4, 5],
                       'data3': np.NaN,
                       'data4': [1, 2, 3, 4, 5]})
print(df_obj)

运行结果:

在这里插入图片描述

2. 默认全部填充

# 用0填补空值
print(df_obj.fillna(value=0))

运行结果:

在这里插入图片描述

3. 用前一行的值填补空值

设置参数 method='pad' 用前一行的值填补空值

# 用前一行填充
print(df_obj.fillna(method='pad',axis=0))

运行结果:

在这里插入图片描述

4. 用后一列的值填补空值

设置参数 method='backfill'

# 用后一列的值填补空值
print(df_obj.fillna(method='backfill', axis=1))

运行结果:

在这里插入图片描述

5. 设置填充个数

limit=数字,设置填充个数

# 用后一列的值填补空值,只填充两个
print(df_obj.fillna(method='backfill', axis=1, limit=2))

运行结果:

在这里插入图片描述

七、ffill():用前一个元素填充

前向后填充缺失值,用缺失值的前一个元素填充,与fillna()相比没有那么多可选性

语法格式

ffill(
        self: DataFrame,
        axis: None | Axis = None,
        inplace: bool = False,
        limit: None | int = None,
        downcast=None,
    ) -> DataFrame | None

案例说明:

import numpy as np
import pandas as pd

df_obj = pd.DataFrame({'data1': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c'],
                       'data2': [1, 1, 2, 3, np.NaN, 5, 5, np.NaN]})
print(df_obj)
print(df_obj.ffill())

运行结果:

在这里插入图片描述

八、bfill():用后一个元素填充

后向填充缺失值,用缺失值的后一个元素填充

import numpy as np
import pandas as pd

df_obj = pd.DataFrame({'data1': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c'],
                       'data2': [1, 1, 2, 3, np.NaN, 5, 5, np.NaN]})
print(df_obj)
print(df_obj.bfill())

在这里插入图片描述

九、duplicated():判断序列元素是否重复

判断序列元素是否重复

语法格式

DataFrame.duplicated(subset=None,keep='first')

参数说明

返回布尔型Series表示每行是否为重复行

示例代码:

import numpy as np
import pandas as pd

df_obj = pd.DataFrame({'data1': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c'],
                       'data2': [1, 1, 2, 3, 4, 5, 5, 5]})
print(df_obj)

print(df_obj.duplicated())

运行结果:

在这里插入图片描述

十、drop_duplicates():删除重复行

删除重复行,默认判断全部列,可指定按某些列判断

语法格式

DataFrame.drop_duplicates(
        self,
        subset: Hashable | Sequence[Hashable] | None = None,
        keep: Literal["first"] | Literal["last"] | Literal[False] = "first",
        inplace: bool = False,
        ignore_index: bool = False,
    ) -> DataFrame | None

参数说明

1. 判断所有列

import numpy as np
import pandas as pd

df_obj = pd.DataFrame({'data1': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c'],
                       'data2': [1, 1, 2, 3, 4, 5, 5, 5]})
print(df_obj)

print(df_obj.drop_duplicates())

运行结果:

在这里插入图片描述

2. 按照指定列进行判断

print(df_obj.drop_duplicates('data2'))

运行结果:

在这里插入图片描述

十一、replace():替换元素

替换元素,可以使用正则表达式

语法格式

replace(
        self,
        to_replace=None,
        value=None,
        inplace: bool = False,
        limit=None,
        regex: bool = False,
        method: str = "pad",
    )

参数说明

1. 单个值替换

to_replace接收字符串

import numpy as np
import pandas as pd

df_obj = pd.DataFrame({'data1': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c'],
                       'data2': [1, 1, 2, 3, np.NaN, 5, 5, np.NaN]})
print(df_obj)

print(df_obj.replace('a',"A"))

运行结果:

在这里插入图片描述

2. 多个值替换一个值

to_replace接收列表

print(df_obj.replace([1, 2], -100))

运行结果:

在这里插入图片描述

3. 多个值替换多个值

to_replace接收列表,value接收列表

print(df_obj.replace([1, 2], [-100, -200]))

运行结果:

在这里插入图片描述

4. 使用正则表达式:

to_replace接收正则语法,设置 regex=True

import numpy as np
import pandas as pd

df_obj = pd.DataFrame({'data1': ['ab', 'abc', 'aaa', 'b', 'b', 'b', 'c', 'c'],
                       'data2': [1, 1, 2, 3, np.NaN, 5, 5, np.NaN]})
print(df_obj)
# 替换a开头的
print(df_obj.replace('a.?',"A",regex=True))

运行结果:

在这里插入图片描述

十二、str.replace():替换元素

替换元素,可使用正则表达式

import numpy as np
import pandas as pd

s = pd.Series(['foo', 'fuz', np.nan])
print(s)
print(s.str.replace('f.', 'ba', regex=True))

运行结果:
在这里插入图片描述

十三、str.split.str():分割元素

以指定字符切割列

import numpy as np
import pandas as pd

data = {'洗漱用品':['毛巾|牙刷|牙膏']}

df = pd.DataFrame(data)
print(df)
print(df['洗漱用品'].str.split('|',expand=True))

运行结果:

在这里插入图片描述

 到此这篇关于Pandas数据清洗函数总结的文章就介绍到这了,更多相关pandas数据清洗 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文