栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

数据清洗Chap4——dataframe操作

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据清洗Chap4——dataframe操作

Chap 4 数据清洗之dataframe操作
  • 4.1数据筛选
  • 4.2数据增加和删除
  • 4.3数据查找和修改
  • 4.4数据整理
  • 4.5层次化索引

4.1数据筛选

1.在数据中,选择需要的行或者列
2.基础索引方式,就是直接引用
3.iloc[行索引名称或者条件,列索引名称或者标签]
4.iloc[行索引位置,列索引位置]
5.注意,区分loc和iloc
下面我们进入实际操作。

import pandas as pd
import os
import numpy as np
os.chdir(r'C:UsersqwDesktopdata ana')#路径改为数据存放路径
df = pd.read_csv('name.csv',encoding = 'utf-8',dtype = {'user_id':str})
df.info()
df.head(10)#查看数据前10行 
df.columns#返回列名
df['user_id']#返回一列
df[['user_id','cat1']].head(5)
df[['user_id','cat1']][1:5]#其中两列的第2行到第5行

####.loc
df.loc[3:4]#没有左开右闭问题,因为loc把3,4看做是标签
df.loc[:,['user_id, 'buy_mount']].head(10)#按照行标签和列标签
df.loc[1:3,['user_id, 'buy_mount']]#按照行标签和列标签
#df.user_id =='917056007'的那两列筛选出来(#,代表and	#|代表或)
df.loc[df.user_id =='917056007',['user_id, 'buy_mount']]
#loc语句,第一个参数都是对行操作,第二个参数对列操作
df.loc[(df.user_id =='917056007') | (df.buy_mount > 3),['user_id','buy_mount']]

####.iloc
#按照位置序号索引
df.iloc[1:4]
df.iloc[:,[0,2]]
df.iloc[[1,10],[0,2]]#第1行,第10行,第1列,第3列

####比较.loc和.iloc
df.loc[2:7]#把index为2-7的都选出来,本质上把2和7当做标签
df.iloc[2:7]#不包括index为7的,按照序号选
4.2数据增加和删除

1.在数据中,直接添加列
2.使用df.insert方法在数据中添加一列
3.掌握drop(labels, axis,inplace = True)的用法
labels表示删除的数据,axis表示作用轴,inplace =True表示是否对原数据生效,axis=0表示按行操作,axis=1表示按列操作
4.使用del函数直接删除其中一列

####直接添加
df['购买量'] = np.where(df['buy_mount']>3,'高','低')

####df.insert方法
auction_id = df['auction_id']
del df['auction_id']
df.insert(0, 'auction_id_new',auction_id)

####df.drop
#删除列
df.drop(labels=['auction_id_new','购买量'],axis = 1, inplace = True)#没有加inplace = True就意味着没有对原来数据进行操作
df.head(5 )
#删除行
df.drop(labels=[3,4],axis=0, inplace= True)#3,4指的是行标签
4.3数据查找和修改

1.在数据中,可以使用rename修改列名称或者行索引名称
2.使用loc方法修改数据
3.使用loc方法查找符合条件的数据
4.条件与条件之间用&或者|连接,分别代表’且’和‘或’
5. 使用between和isin选择满足条件的行

####使用loc方法修改数据
#将gender那一列等于0的值替换为'女性',等于1的值替换为'男性',等于2的值替换为'女性'
df1.loc[df1['gender']=='0','gender'] = '女性'
df1.loc[df1['gender']=='1','gender'] = '男性'
df1.loc[df1['gender']=='2','gender'] = '女性'
####rename修改列名称或者行索引名称
#修改列名
df1.rename(columns = {'user_id':'用户ID','birthday':'出生日期','gender':'性别'},inplace = True)
#修改行索引
df1.rename(index = {3:33244,4:53535}, inplace = True)#把行索引3改为33244,把行索引4#改为53535
df1.iloc[:5]#就取前5行
#就取前5行
df1.reset_index(drop=True,inpace =True)#重置索引,索引从0开始,一直到数据的个数-1
####条件查询
df[df['buy_mount']>10]
df[~(df['buy_mount']>10)]#取相反条件
df[(df['buy_mount']>10) & (df['day'] > 20140101)]#多条件查询
df['buy_mount'].between(4, 10, inclusive = True)#包含索引
df['cat1'].isin([38,28,50014815])#返回布尔值
df[df['cat1'].isin([38,28,50014815])]
4.4数据整理

1定义:在数据清洗的过程中,很多时候需要将数据整理在一起,方便后续的分析,这个过程也叫数据合并
2.常见的合并方法有堆叠和按主健进行合并,堆叠又分为横向堆叠和纵向堆叠,按主键合并类似于sql里面的关联操作

  • 横向堆叠将两张表或多张表在X轴方向,即横向拼接在一起
  • 纵向堆叠将两张表或多张表在Y轴方向,即纵向拼接在一起
  • 注意使用concat时,axis = 1 用于横向,0代表纵向
  • 注意join取inner或者outer时,分别代表交集和并集。
####方法1
import xlrd
workbook = xlrd.open_workbook('meal_order_detail.xlsx')
sheet_name = workbook.sheet_names()
sheet_name
order1 = pd.read_excel('meal_order_detail.xlsx',sheet_name = 'meal_order_detail1')
order3 = pd.read_excel('meal_order_detail.xlsx',sheet_name = 'meal_order_detail2')
order3 = pd.read_excel('meal_order_detail.xlsx',sheet_name = 'meal_order_detail3')
order = pd.concat([order1, order2, order3],axis = 0,ignore_index = True)#纵向堆叠,忽略日期##ignore_index = True索引重置
####方法2简单写法
basic = pd.Dataframe()
for i in sheet_name:
	basic_i = pd.read_excel('meal_order_detail.xlsx',sheet_name = i)
	basic = pd.concat([basic,basci_i],axis=0,ignore_index=True)###ignore_inde可以用basic.reset_index()替换
df = pd.read_csv('1_jiaoyi.csv',dtype={'user_id':str})
df1 = pd.read_csv('2_xingxi.csv',dtype={'user_id':str})
df1.head(10)
df = pd.merge(left = df,right = df1,how = 'inner',left_on = 'user_id',right_on='use_id')#使用use_id进行内联界,取交集
4.5层次化索引
df = pd.read_csv('trade.csv',dtype={'user_id':str,index_col=[3,0]})#把第4列和第2列作为索引
#所谓层次化索引是指有一个以上的索引
df.loc[28].loc[[82830661,532110457]]
#第一层索引为a,第二层索引为b,且列标签诶'XX'
df.loc[(a,b),'列标签']
df.loc[(28,[82830661,532110457]),['auc_id','cat_id']]
df.head(10)




转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/488455.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号