python数据清洗学习笔记--数据表处理

python数据清洗学习笔记–数据表处理

1、数据常用筛选方法

• 在数据中,选择需要的行或者列

• 基础索引方式,就是直接引用

• ioc[行索引名称或者条件,列索引名称或者标签]

• iloc[行索引位置,列索引位置]

注意, 区分loc和iloc

basic[['户主姓名','农户生产经营类型']]      
basic.loc[0:2,['户主姓名', '户主身份证号']] 
order.iloc[:,[0,2]] 
basic.loc[basic['健康状况']== '良好',['户主姓名', '户主身份证号','健康状况']] 

basic.iloc[3,[1,2]]

2、数据的增加和删除

• 在数据中,直接添加列

• 使用df.insert方法在数据中添加一列

• 掌握drop(labels,axis,inplace=True) 的用法

• labels表示删除的数据, axis表示作用轴,inplace=True表示是否对原数据生效

• axis=0按行操作, axis=1按列操作

• 使用del函数直接删除其中一列

del basic['数据']       

basic.drop(labels = ['敬老爱幼情况', '家庭和睦情况'],axis = 1,inplace=True) 

basic.drop(labels= range(6,11),axis=0,inplace=True) 

basic.insert(0, '出生年月', mid)

交换两列的位置:

  • 可以使用insert方法
  • df.insert(位置,变量名称,值)
  • 将auction_id取出来,放在一列
# 先将这一列取出来,赋值给对象auction_id,然后在数据中删除这一列,再将其添加进去

auction_id = df['auction_id']

del df['auction_id']

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

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

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

3、数据的修改和查找

• 在数据中, 可以使用rename修改列名称或者行索引名称

• 使用loc方法修改数据

• 使用loc方法查找符合条件的数据

• 条件与条件之间用&或者|连接,分别代表‘且’和‘或’

• 使用between和isin选择满足条件的行

在这里插入图片描述

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

df1.loc[df1['gender']=='0','gender']='女性'

df1.loc[df1['gender']=='1','gender']='男性'

df1.loc[df1['gender']=='2','gender']='未知'

df1.head(10)

在这里插入图片描述


basic[['户主身份证号','性别']][(basic.健康状况== '良好') & (basic['农户家庭人数'] >3)] 

basic[['户主身份证号','性别','婚姻状况']][ basic['农户家庭数'].between(4,10,inclusive=True)] 

basic.loc[basic['是否加入农民合作社']== '未知']]

basic.rename(columns = {'出生年月':'出生日期','文化程度':'受教育水平' },inplace = True) 

basic.rename(index = {1:'one','10':'ten' },inplace = True)

# 重置索引
df1.reset_index(drop=True,inplace=True)

条件查询:

df[df.buy_mount > 3].head(5)

在这里插入图片描述

#  ~代表非
df[~(df.buy_mount>3)].head(5)
#多条件查询
df[ (df.buy_mount > 3) & (df.day > 20140101)].head(5)

#使用between,inclusive=True代表包含
df[ df['buy_mount'].between(4,10,inclusive=True)]

# 使用pd.isin()方法
# 包含
df[df['auction_id'].isin([41098319944, 17916191097, 21896936223])]  

4、数据整理

定义:

在数据清洗过程中,很多时候需要将不用的数据整理在一起,方便后续的分析,这个过程也叫数据合并

合并方法:

常见的合并方法有堆叠和按主键进行合并,堆叠又分为横向堆叠和纵向堆叠,按主键合并类似于sql里面的关联操作

• 横向堆叠将两张表或多张表在X轴方向,即横向拼接在一起

• 纵向堆叠将两张表或多张表在Y轴方向,即纵向拼接在一起

• 注意使用concat时,axis =1用于横向,0代表纵向

• 注意join取inner或者outer时,分别代表交集和并集

merge1 = pd.concat([df1,df2],axis=1,join='inner’) 
merge1 = pd.concat([df1,df2],axis=1,join='outer’) 
order_merge = pd.concat([order1,order2,order3],axis=0,ignore_index=False) 
order_merge.reset_index(inplace=True)
 

conncat:

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

[‘meal_order_detail1’, ‘meal_order_detail2’,
‘meal_order_detail3’]

order1 = pd.read_excel('meal_order_detail.xlsx',sheet_name ='meal_order_detail1')
order2 = 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=False)
order1.shape

Out[93]:(2779, 19)

# 通过循环方式进行合并
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)

basic.shape

Out[95]:(10037, 19)

inner/outer:

# 交易数据
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)
# 内连接
df2 = pd.merge(left = df, right=df1,  how='inner',  left_on='user_id', right_on = 'user_id')
 

5、层次化索引

在一个轴上拥有两个或者两个以上的索引

• 使用loc语句进行访问

• loc里面接受tuple,如loc[(a,b),:]

记录自:python数据清洗实战–Peter老师

发布了29 篇原创文章 · 获赞 7 · 访问量 1203

猜你喜欢

转载自blog.csdn.net/weixin_44390462/article/details/105295260