当前位置: 首页 > web >正文

数据清理的例子

文章目录

      • df.duplicated().sum()
        • 删除相同项
      • df['Name'] = df['Name'].str.lstrip()
        • 变体
      • df['Name'] = df['Name'].ffill()

本文介绍了使用Pandas库进行数据处理的基础操作,包括数据读取、保存、索引操作和缺失值处理等。主要内容涵盖:

数据读写:使用read_csv()读取CSV文件,to_csv()保存数据
数据查看:head()/tail()查看首尾行,dtypes检查列类型,describe()获取统计信息
索引操作:loc基于标签选择,iloc基于位置选择
数据过滤:布尔条件筛选、多条件组合查询
列操作:添加/删除/修改列
缺失值处理:isna()检测缺失值

文中通过示例代码展示了Pandas的基本语法和应用场景,适合Python数据分析初学者参考。

import pandas as pd
import numpy as np
import os# Ensure the output directory exists
output_dir = r'D:\my_app\python\python project\data'
os.makedirs(output_dir, exist_ok=True)# Set random seed for reproducibility
np.random.seed(42)# Create synthetic dataset
data = {'Name': ['  John Doe  ', 'Alice Smith', 'Bob Johnson  ', '  Mary Brown', 'John Doe','Tom Wilson ', np.nan, 'Sarah Davis', '  Emma Clark ', 'Michael Lee','John Doe', 'Alice Smith', 'David Kim  ', 'Lisa White', np.nan,'Chris Evans', 'Anna Taylor  ', 'Mark Chen', '  Jane Doe', 'Tom Wilson','Emily Green', '  Paul Adams ', 'Laura King', 'James Lee', '  Amy Chen  '],'Age': [25, 30, np.nan, 45, 25, 35, 28, np.nan, 50, 32,25, 30, 40, np.nan, 27, 33, 29, 60, 45, 35,np.nan, 41, 26, 38, 31],'City': [' New York ', 'Paris  ', '  Tokyo', 'London ', 'New York','  Sydney', 'Berlin  ', np.nan, '  Tokyo ', 'Paris',' New York', 'Paris', '  Berlin ', 'London', 'Chicago ',np.nan, 'Sydney ', 'Tokyo', '  London', 'Sydney',' Chicago', 'Berlin', '  Paris ', 'Tokyo  ', np.nan],'Purchase_Amount': [100.50, 200.75, 150.00, np.nan, 100.50, 300.25, 175.00, 250.00, 400.00, np.nan,100.50, 200.75, 180.00, 220.00, np.nan, 190.00, 310.00, np.nan, 260.00, 300.25,270.00, 230.00, 210.00, np.nan, 320.00]
}# Create original DataFrame
df_original = pd.DataFrame(data)# Debug: Check potential duplicates after simulating text cleaning
df_temp = df_original.copy()
df_temp['Name'] = df_temp['Name'].str.strip()
df_temp['City'] = df_temp['City'].str.strip()
print("\nPotential duplicate rows in original (after simulating text cleaning):")
print(df_temp[df_temp.duplicated(keep=False)])# Create a copy for cleaning
df = df_original.copy()# Check duplicates before cleaning
print("Duplicates in original:", df.duplicated().sum())# Clean text to ensure duplicates are correctly identified
df['Name'] = df['Name'].str.strip()
df['City'] = df['City'].str.strip()# Check duplicates after text cleaning
print("Duplicates after text cleaning:", df.duplicated().sum())
#把删除每个字符串的前导和尾随空格(空格、制表符、换行符)# Remove duplicates
df = df.drop_duplicates()
print("Duplicates after drop:", df.duplicated().sum())# Handle missing values
df['Name'] = df['Name'].ffill()
df['City'] = df['City'].ffill()
df['Age'] = df['Age'].fillna(df['Age'].mean())
df['Purchase_Amount'] = df['Purchase_Amount'].fillna(df['Purchase_Amount'].median())# Convert 'Age' to integer
df['Age'] = df['Age'].astype(int)# Save both datasets to the same Excel file in different sheets
output_path = os.path.join(output_dir, 'datasets.xlsx')
with pd.ExcelWriter(output_path, engine='openpyxl') as writer:df_original.to_excel(writer, sheet_name='Original', index=False)df.to_excel(writer, sheet_name='Cleaned', index=False)# Compare datasets
print("\nOriginal Dataset:")
print(df_original)
print("\nCleaned Dataset:")
print(df)
print("\nSummary of Changes:")
print(f"Original shape: {df_original.shape}")
print(f"Cleaned shape: {df.shape}")
print(f"Missing values in original:\n{df_original.isna().sum()}")
print(f"Missing values in cleaned:\n{df.isna().sum()}")

df.duplicated().sum()

示例用法:

import pandas as pd# Create a sample DataFrame with duplicates
df = pd.DataFrame({'Name': ['Alice', 'Bob', 'Alice', 'Charlie'],'Age': [25, 30, 25, 35]
})# Check for duplicates
duplicates = df.duplicated()
print(duplicates)

输出:
0 False
1 False
2 True
3 False
dtype: bool

要获取重复行的总数(如之前所做的那样),请使用 .sum()

print("Duplicates in original:", df.duplicated().sum())

输出:

Duplicates in original: 1

删除相同项
import pandas as pd# Create a sample DataFrame with duplicates
df = pd.DataFrame({'Name': ['Alice', 'Bob', 'Alice', 'Charlie'],'Age': [25, 30, 25, 35]
})#duplicates_all = df.duplicated(keep=False)
# print(duplicates_all)df_no_duplicates = df.drop_duplicates()
print(df_no_duplicates)

df.duplicated(subset=None, keep=‘first’)函数

keep :控制要标记哪些重复项:

first:标记除第一次出现之外的所有重复项(默认)。

last:标记除最后一次出现之外的所有重复项。

False :将所有重复行标记为 True 。

df.drop_duplicates(subset=None, keep='first', inplace=False, ignore_index=False)函数

first:保留第一个匹配项并删除其余匹配项(默认)。
last :保留最后一次出现的内容并删除其余内容。
False :删除所有重复的行(不保留任何重复项)。

df[‘Name’] = df[‘Name’].str.lstrip()

import pandas as pd# Load the DataFrame
df = pd.read_csv(r'D:\my_app\python\python project\data\sample_data.csv')# Add some whitespace to the 'Name' column for demonstration
df.loc[0, 'Name'] = '  Alice  '  # Leading and trailing spaces
df.loc[1, 'Name'] = 'Bob\n'     # Trailing newline
print("Before cleaning:")
print(df)df['Name'] = df['Name'].str.strip()
print("\nAfter cleaning with str.strip():")
print(df)

.str :允许将字符串操作逐个元素应用于列中的每个值(因为列包含字符串)。
.strip() :一种字符串方法,用于删除每个字符串的前导尾随空格(空格、制表符、换行符)。它不会影响单词之间的空格。

修改前:

  Name  Age      City

0 Alice 25 Beijing
1 Bob\n 30 Shanghai
2 Charlie 35 Guangzhou
3 David 28 Shenzhen
4 Eve 22 Hangzhou

修改后:

  Name  Age      City

0 Alice 25 Beijing
1 Bob 30 Shanghai
2 Charlie 35 Guangzhou
3 David 28 Shenzhen
4 Eve 22 Hangzhou

变体

lstrip() :仅删除前导空格。

·df['Name'] = df['Name'].str.lstrip()
rstrip() :仅删除尾随空格。

df['Name'] = df['Name'].str.rstrip()

其他字符串清理 :您可以链接其他 str 方法,例如转换为小写:

df['Name'] = df['Name'].str.strip().str.lower()

df[‘Name’] = df[‘Name’].ffill()

Pandas 中的 .ffill() 函数是一种对 Series (或 DataFrame 列) 执行正向填充的方法,即用先前的非缺失值填充缺失值 ( NaN )。

Series.ffill(limit=None)

http://www.xdnf.cn/news/10009.html

相关文章:

  • 【仿生机器人】仿生机器人认知-情感系统架构设计报告
  • 【Java工程师面试全攻略】Day4:JVM原理与性能调优深度解析
  • 达梦数据库:同1台服务器如何启动不同版本的DMAP服务
  • 【Docker管理工具】部署Docker管理面板DweebUI
  • 思维革命:DeepSeek-R1-0528 如何用一次小更新颠覆大模型格局
  • 每日算法-250530
  • 企业级安全实践:SSL/TLS 加密与权限管理(二)
  • 支持功能安全ASIL-B的矩阵管理芯片IS32LT3365,助力ADB大灯系统轻松实现功能安全等级
  • Tailwind CSS 实战:基于 Kooboo 构建 AI 对话框页面(五):语音合成输出与交互增强
  • JVM 性能调优
  • Day40打卡 @浙大疏锦行
  • 低功耗架构突破:STM32H750 与 SD NAND (存储芯片)如何延长手环续航至 14 天
  • 使用vscode进行c/c++开发的时候,输出报错乱码、cpp文件本身乱码的问题解决
  • 外包项目交付后还能怎么加固?我用 Ipa Guard 给 iOS IPA 增加了一层保障
  • 数据库暴露--Get型注入攻击
  • C++?多态!!!
  • Git的简单介绍分析及常用使用方法
  • openppp2 -- 1.0.0.25225 优化多线接入运营商路由调配
  • 电路笔记(通信):CAN 仲裁机制(Arbitration Mechanism) 位级监视线与特性先占先得非破坏性仲裁
  • 【机器人】具身导航 VLN 最新论文汇总 | Vision-and-Language Navigation
  • 人工智能100问☞第37问:什么是扩散模型?
  • 【清晰教程】利用Git工具将本地项目push上传至GitHub仓库中
  • 【开源工具】音频格式转换大师:基于PyQt5与FFmpeg的高效格式转换工具开发全解析
  • Go语言使用阿里云模版短信服务
  • 类 Excel 数据填报
  • LVS-NAT 负载均衡群集
  • C++高级编程深度指南:内存管理、安全函数、递归、错误处理、命令行参数解析、可变参数应用与未定义行为规避
  • 历年西安电子科技大学计算机保研上机真题
  • Redisson学习专栏(三):高级特性与实战(Spring/Spring Boot 集成,响应式编程,分布式服务,性能优化)
  • Real SQL Programming