數據表(篩選、增刪改查、整理、層次化索引)處理——Python數據清洗實戰筆記(4)

1.數據篩選方法

import pandas as pd
import numpy as np
df = pd.read_csv('../data/baby_trade_history.csv',encoding='utf-8',dtype={'user_id':str})

查看數據

df.info()
#查看前5行
df.head(5)
#查看後5行
df.tail(5)
#查看變量名稱
df.columns
#第2到4行
df['user_id'][1:5]

loc和iloc使用
loc:根據位置;
iloc:根據索引;

#選擇行位置
df.loc[3:4]
#選擇某兩列
df.loc[:,['user_id','buy_mount']]
#loc在這裏選擇行位置
df.loc[1:3,['user_id','buy_mount']]
#多個條件選擇
df.loc[(df.user_id=='786295544') | (df.user_id=='444069173'),['user_id','buy_mount','day']]
#按照索引來選擇第2列到第4列
df.iloc[:,1:5]
#按照位置來選擇第1列和第3列
df.iloc[:,[0,2]]
#按照索引,選擇第4行,第2列和第3列數據,這裏的3代表的是索引標籤,而不是位置;
df.iloc[3,[1,2]]
#按照索引,選擇第3行到第7行,第2列和第3列數據
df.iloc[2:8,[1,2]]

2.數據增加和刪除

  • 增加行在dataframe中不常用;
  • 可以使用append方法,在dataframe中;
  • 可以使用insert方法
  • df.insert(位置,變量名稱,值)
  • 將auction_id取出來,放在一列
#增加一列,購買量,購買量超過3的爲高,低於3的爲低
df['購買量'] = np.where(df['buy_mount'] > 3,'高','低')
df.insert(0,'auction_id',auction_id)

刪列

  • 刪除這兩列,加inplace代表是否在原數據上操作,1表示列;
  • 同時刪除多個變量,需要以列表的形式
  • 注意inplace = True,代表是否對原數據操作,否則返回的是視圖,並沒有對原數據進行操作
  • labels :刪除的數據;
  • axis:作用軸,0-行,1-列;
df.drop(labels=['property','購買量'],axis=1,inplace=True)
#刪除索引標籤3和4對應的行
df.drop(labels=[3,4],inplace=True,axis=0)
#刪除索引名稱1到10,注意range迭代器產生的是1到10
df.drop(labels=range(1,11),axis=0,inplace=True)

3. 數據修改和查找

df3 = pd.read_csv('../data/sam_tianchi_mum_baby.csv',encoding='utf-8',dtype=str)

# 將gender爲0的改爲女性,1改爲男性,2改爲未知
df3.loc[df3['gender']=='0','gender']='女性'
df3.loc[df3['gender']=='1','gender']='男性'
df3.loc[df3['gender']=='2','gender']='未知'

修改列標籤和行索引名稱

df3.rename(columns = {'user_id':'用戶ID','birthday':'出生日期','gender':'性別'},inplace=True)

重製索引

df3.reset_index(drop=True,inplace=True)

查詢

條件查詢

#條件查詢:大於3
df[df.buy_mount > 3]
#條件查詢,沒大於3,~表示非
df[~(df.buy_mount>3)]

多條件查詢

df[(df.buy_mount>3)& (df.day>20131008)]

between

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

isin

#使用pd.isin()方法--包含
df[df['auction_id'].isin([41161316434,10795639825])]

4.數據整理

橫向堆疊在數據清洗中不常用,縱向堆疊可以理解爲把不同表,字段名稱一樣,整合在一起

import xlrd
workbook = xlrd.open_workbook('../data/meal_order_detail.xlsx')
#返回所有sheet的列表
sheet_name = workbook.sheet_names()
sheet_name
['meal_order_detail1', 'meal_order_detail2', 'meal_order_detail3']

order1 =pd.read_excel('../data/meal_order_detail.xlsx',sheet_name='meal_order_detail1')
order2 = pd.read_excel('../data/meal_order_detail.xlsx',sheet_name='meal_order_detail2')
order3 = pd.read_excel('../data/meal_order_detail.xlsx',sheet_name='meal_order_detail3')

忽略原來的索引ignore_index=False

order = pd.concat([order1,order2,order3],axis=0,ignore_index=False)

通過循環的方式進行合併

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

關聯·關聯字段必須類型一致

#交易數據
dfj = pd.read_csv('../data/baby_trade_history.csv',encoding='utf-8',dtype={'user_id':str})
#嬰兒信息
dfy = pd.read_csv('../data/sam_tianchi_mum_baby.csv',encoding='utf-8',dtype=str)

內在連接

dfjy = pd.merge(left=dfj,right=dfy,how='inner',left_on='user_id',right_on='user_id')
dfjy.head(2)

5.層次化索引

#將數據位置第4列和第一列當成索引
df5 = pd.read_csv('../data/baby_trade_history.csv',encoding='utf-8',dtype={'user_id':str},index_col=[3,0])

第一層引用

df5.loc[28]

第二層引用

df5.loc[28].loc[[82830661,532110457]]

直接引用兩層,df5.loc[(a,b):] a和b分別代表第一層和第二層的索引,接受tuple

#第二層索引,多個選擇
df5.loc[(28,[82830661,532110457]),:]
#第二層索引,選擇2個變量
df5.loc[(28,[82830661,532110457]),['auction_id','cat_id']]

其它內容學習

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章