利用Python處理Excel資料__Python

來源:互聯網
上載者:User
 
目錄 讀取資料 顯示資料 顯示資料的行與列數 查看資料格式dtpyes 顯示列名 添加預設的列名 顯示資料後5行 顯示資料唯一值 跳過檔案的第i行不讀取 對缺失值進行識別 資料清洗 處理空值 更改資料格式 更改列名稱 重複資料刪除值 對列表內的值進行替換 資料預先處理 對資料進行排序 資料分組 資料分列 資料提取 按標籤提取 按位置提取 按標籤和位置提取 按條件提取 從合并的數值中提取出指定的數值 資料篩選 按條件式篩選 資料匯總 分類匯總 資料透視 資料統計 資料採樣 描述統計 共變數 相關性分析 
讀取資料 
import pandas as pdimport numpy as npimport matplotlib.pyplot as pltfrom datetime import datetimefrom pandas import Series, DataFrame

讀取x.xlsx檔案
EXCEL檔案 方法1. 引入xlrd模組

import xlrd
讀取資料
df = xlrd.open_workbook('x.xlsx')
方法2 利用pandas模組
import  pandas as pd
讀取資料
df = pd.read_excel('x.xlsx')
本文利用方法2 顯示資料

顯示資料的行與列數

df.shape

(24247, 17)
有24247行,17列資料

查看資料格式dtpyes

df.dtypes

資料格式 對檔案進行描述
image.png 顯示列名
df.columns

列名 如果資料沒有標題列,可用pandas添加預設的列名
df = pd.read_excel('x.xlsx', header = None) #顯示前資料前5行df.head(5)

添加預設列名
本資料有列名,所以不用添加

顯示資料後5行

df.tail(5)

資料後5行

顯示資料唯一值(unique函數)

df['經紀人層級'].unique()

經紀人層級

層級為0 是因為對資料缺失值進行了填充

不讀取哪裡資料,可用skiprows=[i],跳過檔案的第i行不讀取

# 沒有讀取經紀人編號為20124403的行df = pd.read_excel('x.xlsx',skiprows=[2] ) df.head()

不讀取第二行

對缺失值進行識別

# 所有缺失值顯示為True# df.isnull()pd.insull(df)

顯示缺失值 資料清洗

處理空值
刪除空值 (dropna函數)

df.dropna(how='any')

刪除空值
刪除空值

填充空值(fillna函數)

# 空值用0填充df.fillna(value=0)

填充空值


用均值對空值進行填充

 # 利用經紀人響應時間長度的均值對缺失值進行填充df['經紀人響應時間長度'].fillna(df['經紀人響應時間長度'].mean())

填充均值

更改資料格式

通過dtypes函數顯示大區的資料格式為int64,現在改成float格式

df['大區'].astype('float64')

float64

更改列名稱

df.rename(columns={'IM渠道': '渠道'})

更改列名稱

重複資料刪除值 (drop_duplicates()函數)
第一次出現的保留,其餘刪除

#使用預設第一次出現的被保留,後面出現的被刪除df['門店'].drop_duplicates()

第一次出現保留

最後一次出現的保留,其餘刪除

df['門店'].drop_duplicates(keep = 'last')

最後一次出現的保留 對列表內的值進行替換(replace函數)
df['客戶UCID'].replace('10531975', '110')

替換 資料預先處理

對資料進行排序

df.sort_values(by=['客戶當天發送訊息數'])

排序

資料分組——excel中的樞紐分析表
** 對客戶聊天記錄進行分組

#如果price列的值>3000,group列顯示high,否則顯示lowdf['group'] = np.where(df['客戶當天發送訊息數'] > 5,'high','low')df


分組

對符合多個條件進行分組

# 符合經紀人層級為A1且經紀人響應時間長度>24的在sign列顯示為1df.loc[(df['經紀人層級'] == 'A1') & (df['經紀人響應時間長度']>= 24.0), 'sign']=1df

符合多個條件 資料分列
pd.DataFrame((x.split('網') for x in df['客戶端註冊渠道']),              index=df.index,columns=['客戶端註冊渠道','size'])

分列 資料提取 按標籤提取 loc函數
df.loc[0:3]

提取0-3行的資料 按日期進行提取
# 重新設定索引df.reset_index()#設定日期為索引df=df.set_index('日期')#提取2016年11月2號的資料df[‘2016-11-2’ : '2016-11-02']

11月2號的資料 按位置進行提取(iloc函數) 按地區提取
df.iloc[:4, :5]

4行5列 按位置提取
#[0, 2, 5] 代表指定的行,[ 4, 5 ] 代表指定的列df.iloc[[0,2,5],[4,5]]

image.png 按標籤和位置提取 ix
# 行按日期排列,列按位置設定df.ix['2016-11-03':'2016-11-03',4:6]

標籤和位置

按條件提取(loc與isin函數) 用isin函數進行判斷

# 判斷經紀人層級是否為A3df['經紀人層級'].isin(['A3'])

判斷 先判斷結果,將結果為True的提取
#先判斷經紀人層級列裡是否包含A3和M4,然後將複合條件的資料提取出來。df.loc[df['經紀人層級'].isin(['A3','M4'])]

提取

從合并的資料中提出指定的數值

# 提取鏈家網三個字data = df['客戶端註冊渠道']pd.DataFrame(data.str[:3])

提取指定數值 資料篩選

按條件式篩選 符合多個條件,並顯示指定條件(與)

#層級為M4,發送訊息數大於110df.loc[(df['經紀人當天發送訊息數'] > 110) & (df['經紀人層級'] == 'M4'),         ['經紀人響應時間長度','是否5分鐘內響應','經紀人系統號']]

層級為M4,發送訊息大於110 符合多個條件中的一個
#發送訊息數大於400或響應時間長度大於60000df.loc[(df['經紀人當天發送訊息數'] > 400) | (df['經紀人響應時間長度'] > 60000.0),       ['經紀人響應時間長度','經紀人系統號']].sort(['經紀人響應時間長度'])

#篩選完可直接求和df.loc[(df['經紀人當天發送訊息數'] > 400) | (df['經紀人響應時間長度'] > 60000.0),        ['經紀人響應時間長度','經紀人系統號']].sort(['經紀人響應時間長度']).經紀人響應時間長度.sum()
686046.0 不等於
df.loc[(df['經紀人當天發送訊息數']!= 200) & (df['經紀人層級'] == 'A4'),       ['經紀人響應時間長度','經紀人系統號']].sort(['經紀人響應時間長度'])

# count() 算總數df.loc[(df['經紀人當天發送訊息數']!= 200) & (df['經紀人層級'] == 'A4'),        ['經紀人響應時間長度','經紀人系統號']].sort(['經紀人響應時間長度']).經紀人系統號.count()
927

使用query函數

df.query('經紀人層級 == ["A4", "M4"]')

A4或M4 資料匯總 分類匯總groupby 對所有列進行分類匯總
df.groupby('經紀人層級').count()

經紀人層級 對特定列進行匯總
df.groupby('經紀人層級')['經紀人響應時間長度'].count()

對響應時間長度列進行匯總 增加分類條件
df.groupby(['經紀人層級','經紀人是否回複'])['經紀人響應時間長度'].count()

資料不準確,因為進行了篩選填充 進行分組並進行算數運算
# 對經紀人響應時間長度進行分類匯總,並計算均值df.groupby('經紀人層級')['經紀人響應時間長度'].agg([ np.mean])

分類,均值 資料透視
pd.pivot_table(df,index=["經紀人當天發送訊息數"],values=["經紀人響應時間長度"],          columns=["經紀人層級"],aggfunc[len,np.sum],fill_value=0,margins=True)


資料透視 資料統計 資料採樣 簡單隨機抽取sample
df.sample(n=3)

隨機抽取3行 設定採樣權重
需要對每一行進行權重設定,列表行數少可行,過多不可行
假設有4行資料,設定採樣權重
weights = [0, 0, 0.5, 0.5]df.sample(n=4, weights=weights)
確定採樣後是否放回
# 採樣後放回,Truedf.sample(n=6, replace=True)

描述統計 describe函數
自動產生資料的數量,均值,標準差等資料

#round(2),顯示小數點後面2位元,T轉置df.describe().round(2).T

描述統計 標準差std()
df['經紀人響應時間長度'].std()
5605.0826439555485

共變數cov

#計算兩個欄位之間的共變數df['經紀人當天發送訊息數'].cov(df['客戶當天發送訊息數'])

81.036975520713398

相關性分析corr
相關係數在-1到1之間,接近1為正相關,接近-1為負相關,0為不相關

df['客戶當天發送訊息數'].corr(df['經紀人當天發送訊息數'])

0.73482229334669258

作者:鬼宇書生
連結:http://www.jianshu.com/p/356a579062aa
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.