pandas数据清洗常用方法总结

文章介绍了使用Pandas进行数据清洗的常用方法,包括数据读取与保存(如CSV、Excel、JSON、数据库),数据查看,索引操作,选择与过滤,缺失值和重复值处理,异常值处理,行列增删,数据拼接与合并,统计与排序,以及数据类型变换等。此外,还涉及了与数据库(如MySQL、SQLServer)的连接操作。
摘要由CSDN通过智能技术生成

一、数据读取与保存

  1. pd.read_csv()/df.to_csv() 从CSV文件读取数据
  2. pd.read_excel()/df.to_excel() 从Excel文件读取数据
  3. pd.read_json()/df.to_json()
  4. pd.read_html()
  5. pd.read_clipboard()
  6. 数据库读取
    连接MySQL数据库的基本语句如下:
import pymysql
# 建立数据库连接
conn = pymysql.connect(
    host="localhost",
    user="username",
    password="password",
    database="database_name",
    port = 3306
)
# 创建游标对象
cursor = conn.cursor()
# 执行SQL查询语句
sql_query = "SELECT * FROM table_name"
cursor.execute(sql_query)
# 获取查询结果
result = cursor.fetchall()
# 关闭游标和连接
cursor.close()
conn.close()


使用create_engine连接MySQL数据库的基本语句如下:
import sqlalchemy
engine = sqlalchemy.create_engine('mysql+mysqlconnector://username:password@localhost/database_name')
df = pd.read_sql_query('SELECT * FROM table_name', engine) 读取
df.to_sql('',engine,index = False,if_exists = 'replace')  #保存

连接SQL Server数据库的基本语句如下:

import pyodbc
# 建立数据库连接
conn = pyodbc.connect(
    'DRIVER={SQL Server};'
    'SERVER=server_name;'
    'DATABASE=database_name;'
    'UID=username;'
    'PWD=password'
)
# 创建游标对象
cursor = conn.cursor()
# 执行SQL查询语句
sql_query = "SELECT * FROM table_name"
cursor.execute(sql_query)
# 获取查询结果
result = cursor.fetchall()
# 关闭游标和连接
cursor.close()
conn.close()

使用create_engine连接SQL Server数据库的基本语句如下:
from sqlalchemy import create_engine
# 建立数据库连接
engine = create_engine('mssql+pyodbc://username:password@server_name/database_name')
# 执行SQL查询语句
sql_query = "SELECT * FROM table_name"
result = engine.execute(sql_query)
# 获取查询结果
result_list = result.fetchall()
# 关闭连接
engine.dispose()

二、数据查看

  1. df.head() 查看前n行数据,默认为前5行
  2. df.tail() 查看最后n行数据,默认为最后5行
  3. df.sample() 随机采样
  4. df.shape 形状
  5. df.info() 查看数据的基本信息
  6. df.describe() 统计描述性信息,可查看数值型和类别型
  7. df.T 转置
  8. df.values 值
  9. df.index 索引
  10. df.columns 列名
  11. df.types 数据类型

三、索引设置与修改

  1. df.set_index() 将某列设置为索引
  2. df.reset_index() 恢复默认索引
  3. df.reindex() 重新索引
  4. df.index = []
  5. df.columns = []
  6. df.rename(columns = {‘’:‘’},inplace = True) 修改某列名字
# 创建一个DataFrame
data = {'A': [1, 2, 3, 4],
        'B': [5, 6, 7, 8],
        'C': [9, 10, 11, 12]}
df = pd.DataFrame(data)

# 将列'A'设置为索引
df.set_index('A', inplace=True)
# 恢复默认索引
df.reset_index(inplace=True)
# 重新索引
new_index = ['a', 'b', 'c', 'd']
df_reindexed = df.reindex(new_index)
# 修改索引
new_index = ['w', 'x', 'y', 'z']
df.index = new_index
# 修改列名
new_columns = ['Column1', 'Column2', 'Column3']
df.columns = new_columns
# 修改列名为'A'为'NewColumn'
df.rename(columns={'Column1':'NewColumn'}, inplace=True)

四、选择与过滤

  1. df[‘column_name’] 选择指定列
  2. df[[‘column1’, ‘column2’]] 选择多列
  3. df.loc[row_index] 选择指定行
  4. df[df[‘column’] > 10] 选择column列大于10的行
  5. df.loc[‘a’:‘c’] 选择多行,显示索引,左闭右闭
  6. df.loc[‘a’:‘c’,[‘A’:‘C’]] 选择特定行和列
  7. df.loc[‘a’:‘c’,‘A’:‘C’]
  8. df.iloc[3:6]
  9. df.iloc[1:3,4:8] 隐式索引,左闭右开
  10. df.loc[df[‘A’]>0,df.loc[‘a’]>2] 选择a行大于2,A列大于0的所有行
  11. df.loc[df[‘column’] > 10, [‘column1’, ‘column2’]]
  12. df[df[‘column’].notnull()] 选择某列非空的所有行

五、缺失值重复值处理

  1. df.isnull()/df.notnull() 缺失值判断
  2. df.isnull().sum() 缺失值统计,返回一个以 df各列值为nan个数为元素的序列
  3. df.isnull().sum().sum() 返回 df所有值为nan的个数和。
  4. df.dropna() 删除指定列
  5. df.duplicated() 重复值
  6. df.dupicated().sum()
  7. df.drop_duplicated() 重复值删除, 保留第一次出现的行数据,删除其他的重复行数据 keep=‘first’ 可缺省
  8. df.drop_duplicated(keep=‘last’) # 保留最后一次出现的行数据,删除其他的重复行数据
  9. df.drop_duplicated(subset=[‘sex’,‘year’],keep=‘last’) # 移除以指定列(‘sex’,‘year’)所谓判断重复标准的的行
  10. df.replace() 替换
  11. df.fillna(0,inplace=False) # 将 DataFrame中的所有 NaN填充为 0 inplace缺省时默认 inplace=False
  12. df.fillna(0,inplace=True) # 就地修改
  13. df[0].fillna(df[0].mean()) # 填充第 1列,使用第一列的统计非 NaA的平均值。
  14. df[0:2]=df[0:2].fillna(‘enene’) # 填充第 1-3列,使用’enene’
  15. df2.fillna({0:0,2:‘aa’}) # 给指定的列填充 第一列的填充值为 0,第 3列的填充值为 ‘aa’
  16. df.loc[0].fillna(df.loc[0].mean(),inplace=True) # 填充第 1行,使用第一行的统计非 NaA的平均值。
  17. df.loc[0:2]=df.loc[0:2].fillna(‘enene’) # 填充第 1-3行,使用’enene’
  18. df.dropna(how=‘any’,axis=0) 删除含有 NaN的整行数据 当 how='any’时,可以缺省
  19. df.dropna(how=‘all’,axis=0) 删除所有值为 NaN的整行数据
  20. df.dropna(how=‘any’,axis=1) 删除含有 NaN的整列数据 当 how='any’时,可以缺省
  21. df.dropna(how=‘all’,axis=1) 删除所有值为 NaN的整列数据

六、异常值处理

  1. df.replace(‘’,‘未知’) 将 df中所有的 ""替换为 “未知”
  2. df.replace([‘’,2001],[‘未知’,2002]) 将 df中所有的 ""替换为 “未知”,将 2001替换为 2002
  3. df.replace({‘’:‘未知’,2001:2002}) 将 df中所有的 ""替换为 “未知”,将 2001替换为 2002

七、行列增加与删除

  1. df[‘c’] = [1,1,1] 增加行
  2. df.loc[‘c’] = [1,1,1] 增加行
  3. df[‘column4’] = [3,5,7,8] 增加列
  4. df.drop([‘one’,‘two’],axis = 0)
  5. df.pop()
  6. df.insert() 插入

八、拼接与合并

  1. df = df.append(df1) 纵向拼接
  2. pd.concat([df1,df2],axis = 1) 纵向拼接
  3. pd.concat([df1,df2],axis = 0) 横向拼接
  4. pd.merge(left,right,on = ‘key’) 主键合并
  5. df1.join(df2)

九、统计与排序

  1. S.value_counts() 计数
  2. S.nlargest()
  3. S.nsmallest()
  4. S.unique() 唯一值
  5. S.nunique() 唯一值数量
  6. df.sum()
  7. df.mean()
  8. df.var()
  9. df[‘column’].mean() 计算某列均值
  10. df[‘column’].sum() 计算某列总和 max() 最大值 min() 最小值
  11. data.count()
  12. df.sort_index() 按照索引排序
  13. df.sort_values(by=‘column’) 按照某列值排序
  14. df.sort_values(by=‘column’,by=‘column’) 按列降序排序

十、重塑与轴向旋转

  1. df.stack() 数据堆叠
  2. df.unstack() 数据展开
  3. df.pivot_table(values=‘value’, index=‘index_column’, columns=‘columns’) 数据透视表

十一、数据运算

  1. s1+s2
  2. df1 + df2 索引自动对齐
  3. s.map() 映射
  4. s.apply()
  5. df.apply(function)
  6. df.applymap()

十二、数据类型变换

  1. s.astype(str) 转换为指定类型
  2. pd.to_numeric()
  3. pd.to_datetime() 将日期字符串转换为日期类型

十三、分组运算

  1. df.groupby(‘column’).mean() 按列进行分组并计算统计量
  2. df.groupby([‘column1’, ‘column2’]).sum() 按多列进行分组并计算统计量
  3. pd.groupby().std() #var,min,max,sum
  4. df.groupby().agg([np.mean]) 标准的函数 std,var,min,max
  5. df.groupby().agg([ppp]) 自定义函数
  6. df.groupby().agg([np.mean,ppp]) 多个聚合函数
  7. df.pivot_table() 透视表,先groupby,再求mean
  8. pd.crosstab() 交叉表,统计分组频率

详细讲解请看历史文章
Python学习——pandas库的使用之series及DataFrame创建、查看、切片、运算
Python学习——缺失值、重复值处理及替换
Python学习——数据排序及分箱pd.cut\pd.qcut
Python学习——数据分组统计、分组运算及透视
Python学习——时间序列
Python学习——字符串序列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值