数据清洗之数据表处理 筛选 增删查改 整理 层次化索引

数据清洗之数据表处理

1. 数据常用筛选方法

In [ ]:

import pandas as pd
import numpy as np

In [ ]:

import os
# 更改文件路劲
os.chdir(‘F:\CSDN\课程内容\代码和数据‘)

In [ ]:

df = pd.read_csv(‘baby_trade_history.csv‘, encoding=‘utf-8‘,dtype={‘user_id‘:str})

数据筛选

  • 查看数据

In [ ]:

df.info()

In [ ]:

df.head(5) #查看前5行

In [ ]:

df.tail(5) #查看后5行

In [ ]:

df.columns #查看变量名称(列)
  • 简单索引

In [ ]:

df[‘user_id‘]

In [ ]:

df[‘user_id‘][1:5]# 第二行到第五行

In [ ]:

# 多个变量选择
df[[‘user_id‘,‘buy_mount‘,‘day‘]][:5]
  • loc和iloc 的使用

In [ ]:行

df.loc[3:4]# 选择行索引标签

In [ ]:列

df.loc[:,[‘user_id‘,‘buy_mount‘]]#选择某两列

In [ ]:行&列

df.loc[1:3,[‘user_id‘,‘buy_mount‘]] #loc在这里选择的是行索引标签

In [ ]:满足一个条件下某些列的值

df.loc[df.user_id ==‘786295544‘,[‘user_id‘,‘buy_mount‘,‘day‘]]

In [ ]:满足多个条件下某些列的值

df.loc[(df.user_id ==‘786295544‘) | (df.user_id ==‘444069173‘),[‘user_id‘,‘buy_mount‘,‘day‘]]# 多个条件选择

In [ ]:

#注意loc是标签
#注意iloc是位置

In [ ]:

df.iloc[:,1:4] #按照位置来选择第二列到第四列

In [ ]:

df.iloc[:,[0,2]] # 按照位置来选择第1列和第3列

In [ ]:用[1,2]来表示选取单独的某几列

df.iloc[3,[1,2]] #选择第4行,第2列和第3列数据, 这里的3代表的不是索引标签而是位置

In [ ]:

df.iloc[2:7,[1,2]] #选择第3行到第7行,第2列和第3列数据
  • 注意loc和iloc的区别

In [ ]:行标签2~7的行

df.loc[2:7]

In [ ]:位置,第2~7行

df.iloc[2:7]

2.数据增加和删除

  • 增加一列

In [ ]:

#增加一列,购买量,购买量超过3的为高,低于3的为底

In [ ]:

df[‘购买量‘] = np.where(df[‘buy_mount‘] >3,‘高‘,‘低‘)

In [ ]:

df

In [ ]:

# 增加行在dataframe中不常用,后面会用其他方法实现
# 可以使用append方法在 dataframe末尾实现
  • 可以使用insert方法
  • df.insert(位置,变量名称,值)
  • 将auction_id取出来,放在一列

In [ ]:

# 先将这一列取出来,赋值给对象auction_id,然后在数据中删除这一列,再将其添加进去

In [ ]:先找到

auction_id = df[‘auction_id‘]

In [ ]:删除原来的它

del df[‘auction_id‘]

In [ ]:在新的位置(这里是第一列)插入它

df.insert(0, ‘auction_id‘, auction_id)

In [ ]:

df.head(5)
  • 删除

In [ ]:

# 删除这两列,加inplace代表是否在原数据上操作,1代表沿着列的方向
# 同时删除多个变量,需要以列表的形式
# 注意inplace =True,代表是否对原数据操作, 否则返回的是视图,并没有对原数据进行操作

In [ ]:

# labels表示删除的数据, axis表示作用轴,inplace=True表示是否对原数据生效,
# axis=0按行操作, axis=1按列操作

In [ ]:

axis = 0 对行
axis = 1 对列
df.drop(labels = [‘property‘, ‘购买量‘],axis = 1,inplace=True) #删除这两列,加inplace代表是否在原数据上操作, 1代表沿着列的方向

In [ ]:

# 按行删除法

In [ ]:

df.drop(labels = [3,4],inplace = True,axis= 0) # 删除索引标签3和4对应的行

In [ ]:

df.drop(labels= range(6,11),axis=0,inplace=True)  #删除索引名称1到10,注意range迭代器产生的是1到10

In [ ]:

# 查看
df

3. 数据修改和查找

In [ ]:

df1 = pd.read_csv(‘sam_tianchi_mum_baby.csv‘,encoding = ‘utf-8‘,dtype =str)

In [ ]:

df1.head(5)

In [ ]:

# 将gender为0的改为女性,1改为男性,2改为未知

In [ ]:

df1.loc[df[‘gender‘] ==‘0‘,‘gender‘] =‘女性‘

In [ ]:

df1.loc[df[‘gender‘] ==‘1‘,‘gender‘] =‘男性‘

In [ ]:

df1.loc[df[‘gender‘] ==‘2‘,‘gender‘] =‘未知‘

In [ ]:

df1.head(10)
  • 修改列名称
  • basic.rename(columns={},index={})

In [ ]:

# 修改列标签和行索引名称
df1.rename(columns = {‘user_id‘:‘用户ID‘,‘birthday‘:‘出生日期‘,‘gender‘:‘性别‘},inplace = True)

In [ ]:

df1.rename(index = {1:‘one‘,10:‘ten‘ },inplace = True) #修改行索引名称

In [ ]:

df1.reset_index(drop=True,inplace=True)# 重置索引,变回0123456……

In [ ]:

df1.head(10)
  • 查询

In [ ]:

# 条件查询
df[df.buy_mount > 3] #性别等于未知

In [ ]:

df[~(df.buy_mount > 3)] # ~代表非,取相反条件的

In [ ]:

df[ (df.buy_mount > 3) &  (df.day > 20140101)] # 多条件查询

In [ ]:

#使用between,。      inclusive=True代表包含(闭区间)
df[ df[‘buy_mount‘].between(4,10,inclusive=True)]

In [ ]:

# 使用pd.isin()方法
# 包含后面这几个数的‘auction_id‘的数据
df[df[‘auction_id‘].isin([41098319944, 17916191097,21896936223])] 

4 数据整理

  • 横向堆叠在数据清洗中不常用,纵向堆叠可以理解为把不同的表,字段名称一样。整合在一起

In [ ]:

import xlrd
workbook = xlrd.open_workbook(‘meal_order_detail.xlsx‘)
sheet_name = workbook.sheet_names() #返回所有sheet的列表

In [ ]:

sheet_name

In [ ]:

order1 = pd.read_excel(‘meal_order_detail.xlsx‘,sheet_name =‘meal_order_detail1‘)

In [ ]:

order2 = pd.read_excel(‘meal_order_detail.xlsx‘,sheet_name =‘meal_order_detail2‘)

In [ ]:

order3 = pd.read_excel(‘meal_order_detail.xlsx‘,sheet_name =‘meal_order_detail3‘)

In [ ]:枞向合并

order = pd.concat([order1,order2,order3],axis=0,ignore_index=False)# 忽略原来的索引,这样就不会覆盖了

In [ ]:

order1.shape

In [ ]:

# 通过循环方式进行合并

In [ ]:

basic = pd.DataFrame()
for i in sheet_name:
    basic_i = pd.read_excel(‘meal_order_detail.xlsx‘, header = 0,sheet_name=i,encoding=‘utf-8‘)
    basic = pd.concat([basic,basic_i],axis=0,ignore_index=False) 

In [ ]:

basic.shape
  • 关联
  • 关联字段必须类型一致

In [ ]:

df = pd.read_csv(‘baby_trade_history.csv‘, encoding=‘utf-8‘,dtype={‘user_id‘:str})# 交易数据
df1 = pd.read_csv(‘sam_tianchi_mum_baby.csv‘,encoding = ‘utf-8‘,dtype =str)#婴儿信息

In [ ]:关联

df2 = pd.merge(left = df, right=df1,  how=‘inner‘,  left_on=‘user_id‘, right_on = ‘user_id‘)      #how=‘inner‘内连接 

In [ ]:

df2.head(10)

5 层次化索引

In [ ]:

df = pd.read_csv(‘baby_trade_history.csv‘, encoding=‘utf-8‘,dtype={‘user_id‘:str},index_col=[3,0])

#index_col=[3,0]将数据第4列和第1列当成索引 #dtype={‘user_id‘:str}改变数据类型

In [ ]:

df.loc[28] #第一层引用

In [ ]:

df.loc[28].loc[[82830661,532110457]]#第二层引用
  • 直接引用两层
  • df3.loc[(a,b),:] #a和b分别代表第一层和第二层的索引
  • 接受tuple

In [ ]:

df.loc[(28,[82830661,532110457]),:]# 第二层索引选择,多个选择

In [ ]:

df.loc[(28,[82830661,532110457]),[‘auction_id‘,‘cat_id‘]]# 第二层索引选择,选择2个变量

In [ ]:

df.loc[([28,50014815])] #第一层索引为28和50014815

原文地址:https://www.cnblogs.com/xingnie/p/12261802.html

时间: 2024-10-13 18:06:17

数据清洗之数据表处理 筛选 增删查改 整理 层次化索引的相关文章

4.CRUD Operations Using the Repository Pattern in MVC【在MVC中使用仓储模式进行增删查改】

原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-using-the-repository-pattern-in-mvc/ 上一篇文章,讲到了MVC中基本的增删查改,这篇文章,我会继续说到,使用仓储模式,进行增删查改. 什么是仓储模式呢,我们先来了解一下:  仓储模式是为了在程序的数据访问层和业务逻辑层之间创建一个抽象层,它是一种数据访问模式,提供了一种更松散耦合的数据访问方法.我们把创建数据访问的逻辑代码写在单独的类中,或者类库中

mybatis实现的对数据的增删查改

mybatis实现的对数据的增删查改 前期准备 新建java工程或java wweb工程, 需要导入以下的包, 基本工作已经完成,接下来开始进入正题. 新建实体类 新建与数据库表对应的实体类 package com.edu.hpu.domain; /** * @author Administrator *user表所对应的实体类 */ public class User { //实体类的属性和表的字段名称一一对应 private int id; private String name; priv

MERGE批量增删查改数据

MERGE优点: 在批量处理数据的时候,我可以用到merge一次完成数据处理. 示例代码一: MERGE INTO student AS t using (SELECT '丽水' AS NAME,20 AS age UNION ALL SELECT '王五' AS NAME ,21 AS age) s ON t.Age=s.age WHEN MATCHED THEN UPDATE SET t.Name=s.NAME WHEN NOT MATCHED THEN INSERT VALUES(s.NA

php mysql增删查改

php mysql增删查改代码段 $conn=mysql_connect('localhost','root','root');  //连接数据库代码 mysql_query("set names utf8");  //传输编码 mysql_query('sql'$conn); //查找名为sql的数据库 admin为表名: 查找数据代码段: $sql="select * from admin ";  //查询表: $sql="select  * from

c++中的顺序表写法,主要实现(增删查改,构造函数,运算符重载)

本文的内容主要是,利用c++写出顺序表,并对写出的代码进行测试, 主要实现的功能:实现对顺序表的增删查改, 要写的函数:构造函数,赋值运算符重载,析构函数.在编写代码过程中应注意到深浅拷贝问题. 下面是顺序表的类函数: #pragma once #include<iostream> using namespace std; typedef int DataType; class SeqList { public: SeqList(); SeqList(DataType *array, size

mysql基础知识之增删查改使用介绍

 mysql基础知识之增删查改使用介绍 本文主要介绍mysql常用的SELECT.INSERT.UPDATE.DELETE语句的使用,数据库的安装这里不做介绍,并且事先已经准备好相关数据. 本文中使用的student表中的数据如下: mysql> SELECT * FROM student; 一.SELECT语句的使用 1.单表查询 语法格式: SELECT culom1,culom2,culom3 FROM TABLE_NAME; 可以改变字段显示顺序 2.WHERE子句查询 语法格式: SE

nodejs连接mysql并进行简单的增删查改

最近在入门nodejs,正好学习到了如何使用nodejs进行数据库的连接,觉得比较重要,便写一下随笔,简单地记录一下 使用在安装好node之后,我们可以使用npm命令,在项目的根目录,安装nodejs中的mysql模块 npm install mysql 在连接数据库之前,要先引入nodejs连接处理mysql的模块 var mysql = require('mysql'); 类似php连接mysql的方式,编写连接代码 //使用nodejs处理mysql的模块,使用创建连接方法,创建与mysq

EF实现增删查改功能

In the previous tutorial you created an MVC application that stores and displays data using the Entity Framework and SQL Server LocalDB. In this tutorial you'll review and customize the CRUD (create, read, update, delete) code that the MVC scaffoldin

在MVC程序中,使用泛型仓储模式和工作单元实现增删查改

在这片文章中,我将自己动手为所有的实体:写一个泛型仓储类,还有一个工作单元. 工作单元的职责就是:为每一个实体,创建仓储实例.仓储(仓库)的职责:增删查改的功能实现. 我们将会在控制器中,创建工作单元类(UnitOfWork)的实例,然后根据实体,创建仓储实例,再就是使用仓储里面的方法,做操作了. 下面的图中,解释了,仓储和EF 数据上文的关系,在这个图里面,MVC控制器和仓储之间的交互,是通过工作单元来进行的,而不是直接和EF接触. 那么你可能就要问了,为什么要使用工作单元??? 工作单元,就