数据清洗Chap4——dataframe操作

本文详细介绍了如何使用pandas库在Python中通过iloc和loc方法进行数据筛选、列增删、内容修改,以及层次化索引的操作。涵盖了数据清洗的关键步骤,如选择特定行列、添加和删除数据,以及利用条件语句进行高级查询和数据整理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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:\Users\qw\Desktop\data 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)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值