【Pandas数据清洗1】使用pandas进行数据清洗——基础用法(一)


在数据分析过程中,数据清洗是一个不可或缺的重要步骤。本文分享10个Pandas数据清洗的实用技巧,包括处理缺失值、数据类型转换、处理异常值、数据分箱等等。

1、技巧一:处理缺失值

1.1 缺失值的识别与统计

在大多数数据集中,缺失值是常见的问题。使用Pandas,你可以轻松识别和统计数据中的缺失值。

import pandas as pd

# 创建示例数据
data = {
    
    'Name': ['Alice', 'Bob', None, 'David'],
        'Age': [24, None, 19, 33],
        'Salary': [50000, 60000, None, 58000]}
df = pd.DataFrame(data)

# 查看数据框
print(df)

# 统计缺失值
print(df.isnull().sum())

1.2 填充缺失值

对于缺失值,你可以使用多种方法进行填充。常见的方法有填充平均值、中位数或使用前一个值。

# 使用均值填充缺失值
df['Age'].fillna(df['Age'].mean(), inplace=True)
df['Salary'].fillna(df['Salary'].median(), inplace=True)

# 使用前一个值填充缺失值
df['Name'].fillna(method='ffill', inplace=True)
print(df)

1.3 删除缺失值

有时候,直接删除含有缺失值的行或列也不失为一种解决办法。

# 删除含有缺失值的行
df.dropna(inplace=True)
print(df)

# 删除含有缺失值的列
df.dropna(axis=1, inplace=True)
print(df)

2. 技巧二:处理重复数据

2.1 查找重复数据

数据中有时会存在重复值,导致分析结果出现偏差。可以使用Pandas检查是否存在重复数据。

# 创建包含重复值的示例数据
data = {
    
    'Name': ['Alice', 'Bob', 'Alice', 'David'],
        'Age': [24, 19, 24, 33]}
df = pd.DataFrame(data)

# 查找重复值
duplicates = df.duplicated()
print(duplicates)

2.2 删除重复数据

一旦发现重复数据,可以很方便地将其删除。

# 删除重复值
df.drop_duplicates(inplace=True)
print(df)

3. 技巧三:数据类型转换

3.1 理解数据类型

在Pandas中,每列都有一个数据类型。常见的数据类型包括整数、浮点数、字符串和日期时间。

# 查看每列数据类型
print(df.dtypes)

3.2 转换数据类型

有时需要将数据类型进行转换,例如将字符串转换为日期时间格式,或将浮点数转换为整数。

# 创建示例数据
data = {
    
    'Date': ['2024-11-01', '2024-11-02', '2024-11-03'],
        'Value': ['1.0', '2.5', '3.8']}
df = pd.DataFrame(data)

# 将字符串转换为日期时间格式
df['Date'] = pd.to_datetime(df['Date'])

# 将字符串转换为浮点数,再转换为整数
df['Value'] = df['Value'].astype(float).astype(int)
print(df)
print(df.dtypes)

4. 技巧四:标准化数据格式

4.1 字符串格式标准化

在数据分析中,字符串格式标准化可以提高数据的一致性和可读性。可以利用Pandas进行各种字符串操作。

# 创建示例数据
data = {
    
    'Name': ['alice ', ' Bob', 'DAVID', 'caRol']}
df = pd.DataFrame(data)

# 去除空白字符
df['Name'] = df['Name'].str.strip()

# 转换为小写
df['Name'] = df['Name'].str.lower()

# 首字母大写
df['Name'] = df['Name'].str.title()
print(df)

4.2 日期时间格式标准化

日期时间格式标准化对时间序列分析至关重要。可以使用Pandas解析和格式化日期时间数据。

# 创建示例数据
data = {
    
    'Date': ['2024-01-02', '03/02/2024', '2024.04.03']}
df = pd.DataFrame(data)

# 将不同格式的日期字符串转换为日期时间格式
df['Date'] = pd.to_datetime(df['Date'])
print(df)

# 改变日期时间格式的显示
df['Formatted_Date'] = df['Date'].dt.strftime('%Y/%m/%d')
print(df)

5. 技巧五:处理异常值

5.1 识别异常值

异常值是那些与数据集的大部分值显著偏离的数据点。识别这些异常值是数据清洗的重要步骤。

# 创建包含异常值的示例数据
data = {
    
    'Value': [10, 12, 14, 1000, 15, 16, 18]}
df = pd.DataFrame(data)

# 通过描述性统计识别异常值
print(df.describe())

# 通过Z-score识别异常值
df['Z-Score'] = (df['Value'] - df['Value'].mean()) / df['Value'].std()
print(df)

5.2 处理异常值

处理异常值有多种方法,可以选择删除这些数据点或者用其它合理的值进行替换。

# 删除异值
df_cleaned = df[(df['Z-Score'] > -3) & (df['Z-Score'] < 3)]
print(df_cleaned)

# 替换异值—例如用中位数代替
median = df['Value'].median()
df['Value'] = df['Value'].apply(lambda x: median if abs(x - df['Value'].mean()) > 3 * df['Value'].std() else x)
print(df)

6. 技巧六:数据分箱

6.1 分箱的概念和用途

数据分箱是指将连续变量分割成多个区间,以便于分析和建模。它可以帮助我们更容易地发现数据中的模式。

6.2 使用Pandas进行数据分箱

Pandas提供了cut和qcut两个函数可以用来进行数据分箱。cut是按固定的间隔分箱,而qcut是按分位数分箱。

# 创建示例数据
data = {
    
    'Age': [22, 25, 27, 29, 32, 35, 37, 40]}
df = pd.DataFrame(data)

# 使用cut进行分箱
bins = [20, 30, 40, 50]
labels = ['20-30', '30-40', '40-50']
df['Age Group'] = pd.cut(df['Age'], bins=bins, labels=labels)
print(df)

# 使用qcut进行分箱
df['Age Group Quantile'] = pd.qcut(df['Age'], q=3, labels=['Young', 'Middle-aged', 'Old'])
print(df)

7. 技巧七:数据合并

7.1 合并DataFrame

多个数据集经常需要合并在一起。Pandas的merge函数可以像SQL中的JOIN操作一样合并DataFrame。

# 创建示例数据
left = pd.DataFrame({
    
    'Key': ['A', 'B', 'C', 'D'],
                     'Value1': [1, 2, 3, 4]})
right = pd.DataFrame({
    
    'Key': ['A', 'B', 'E', 'F'],
                      'Value2': [5, 6, 7, 8]})

# 合并数据集
merged_df = pd.merge(left, right, on='Key', how='inner')
print(merged_df)

7.2 拼接DataFrame

Pandas的concat函数可以在行或列方向拼接DataFrame。

# 按行拼接
concat_df = pd.concat([left, right], axis=0)
print(concat_df)

# 按列拼接
concat_df = pd.concat([left, right], axis=1)
print(concat_df)

8. 技巧八:删除不需要的列

8.1 查找不需要的列

数据集中有时会存在不需要的列,可以通过查看列名来确定需要删除的列。

# 查看列名
print(df.columns)

8.2 删除列

确定需要删除的列后,可以使用drop方法删除这些列。

# 删除不需要的列
df.drop(columns=['Age Group Quantile'], inplace=True)
print(df)

9. 技巧九:数据分组与聚合

9.1 分组数据

使用groupby方法可以方便地按特定列进行分组。

# 创建示例数据
data = {
    
    'Category': ['A', 'A', 'B', 'B'],
        'Value': [10, 15, 10, 30]}
df = pd.DataFrame(data)

# 分组数据
grouped = df.groupby('Category')
print(grouped.mean())

9.2 聚合操作

在分组的基础上,可以对数据进行各种聚合操作,例如求平均值、总和、最大值等。

# 进行聚合操作
aggregated = grouped.agg({
    
    'Value': ['mean', 'sum', 'max']})
print(aggregated)

10. 技巧十:处理文本数据

10.1 字符串操作

Pandas提供了一系列字符串方法来处理文本数据,例如查找、替换和拆分字符串。

# 创建示例数据
data = {
    
    'Text': ['Hello World', 'Pandas is great', 'Python is powerful']}
df = pd.DataFrame(data)

# 字符串查找
df['Contains Python'] = df['Text'].str.contains('Python')
print(df)

# 字符串替换
df['Text'] = df['Text'].str.replace('Python', 'Pandas')
print(df)

# 字符串拆分
df['Text Split'] = df['Text'].str.split()
print(df)

10.2 处理多值列

有时候一列数据可能包含多个值,例如用逗号分隔的标签,需要对这些值进行处理。

# 创建示例数据
data = {
    
    'Tags': ['Python,Data,Analysis', 'Pandas,Python', 'Machine Learning,Python']}
df = pd.DataFrame(data)

# 拆分多值列
df['Tags List'] = df['Tags'].str.split(',')
print(df)

猜你喜欢

转载自blog.csdn.net/weixin_42212872/article/details/143504998