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

数据清理的例子

文章目录

      • 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)

相关文章:

  • 【计算机网络】传输层TCP协议——协议段格式、三次握手四次挥手、超时重传、滑动窗口、流量控制、
  • 【Golang进阶】第八章:并发编程基础——从Goroutine调度到Channel通信实战
  • CentOS 7 环境下部署 LAMP
  • Go语言通道如何实现通信
  • 计算机网络 HTTP篇常见面试题总结
  • Vert.x学习笔记-EventLoop工作原理
  • 使用ssh-audit扫描ssh过期加密算法配置
  • day14 leetcode-hot100-27(链表6)
  • Telerik生态整合:Kendo UI for Angular组件在WinForms应用中的深度嵌入(一)
  • Edmonds-Karp详解-基于BFS的最短增广路径
  • 【仿生机器人】仿生机器人认知-情感系统架构设计报告
  • 抽奖系统抽奖活动管理流程
  • 基于 KubeKey 3.1.9,快速部署 K8s 1.33.0 高可用集群
  • quasar electron mode如何打包无边框桌面应用程序
  • 代码随想录算法训练营 Day60 图论Ⅹ Bellmen_ford 系列算法
  • 由反汇编代码确定结构体的完整声明
  • 精通 Kubernetes:从故障排除到化繁为简
  • Eclipse集成lombok
  • 数据结构之队列:原理与应用
  • 嵌入式(1):STM32 GPIO与AFIO深度解析:从原理到高阶应用实战
  • 建立b2b网站成本/网站广告接入
  • 在那些网站可以接兼职做/怎么提高百度搜索排名
  • 山东网站seo公司/网站百度百科
  • 石碣仿做网站/广州谷歌seo
  • 绿植网站怎么做/国家最新新闻
  • 乐清网站只做/最新足球新闻头条