溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Pandas如何安裝使用

發(fā)布時間:2021-11-30 15:25:43 來源:億速云 閱讀:210 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要介紹了Pandas如何安裝使用,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

1. 安裝

如果做數(shù)據(jù)分析用途建議使用Anaconda,自帶pandas numy 以及很多庫。

Anaconda 安裝地址:https://www.continuum.io/downloads

安裝之后可以在terminal 輸入 conda 開頭的命令(類似pip),例如list 查看已經(jīng)安裝的包,以及進(jìn)行常用的install update等動作。


2. Import

絕大部分時候pandas都被使用者import為pd,根據(jù)作者的描述其實pandas是panel data的縮寫(而不是熊貓)

import pandas as pd


3. DataFrame

DataFrame是Pandas用來處理數(shù)據(jù)最常見的格式,一張二維的表,有行,列和值。類似于一個數(shù)據(jù)庫里的table 或者excel中的worksheet。如果有一個DataFrame叫df, df.columns可以得到所有的列標(biāo)簽,同理df.index可以得到所有的行標(biāo)簽。


4. 讀取數(shù)據(jù)

4.1 從excel中讀取數(shù)據(jù)

raw = pd.read_excel('%s%s.xlsx' %path %filename, sheetname='Data', skiprows= 1)

數(shù)據(jù)會被讀取到一個叫raw的DataFrame中,sheetname可以指定讀某個工作表,skiprow可以跳過初始N行的數(shù)據(jù)。


4.2 從csv中讀取數(shù)據(jù)

raw = pd.read_csv('%s%s.csv' %path %filename)


5. 增刪改查

5.1 增刪列

新增列,位置在最后一列

raw['新列名'] = 'string'

在中間增列,使用 df.insert()

df.insert(位置,'列名',值)

例如,在raw df第二列(index不算一列)插入一列,名為city,值為source_data的 [city]列

raw.insert(1,'column_name',source_data['data1'])

刪除列

del raw['列名']


5.2 改列名

5.2.1 一次性改變所有的列名

cols = ['name_1', 'name_2', 'name_3']
raw= raw[cols]

5.2.2 修改某個列名
使用df.rename(), 注意如果df中有多個old_name列的話都會被一并重命名為new_name

df=df.rename(columns = {'old_name':'new_name'})


5.3 改index

把某列設(shè)為index,原index會被刪除

raw = raw.set_index('column_name')

reset_index(),新index是以0開始的遞增整數(shù)列,原index會變成一個新的列。

raw = raw.reset_index()

如果不需要原來的index中的值可以加drop = True:

raw = raw.reset_index(drop=True)


5.4 編輯值(計算值)

5.4.1 四則運(yùn)算

raw['data1'] = raw['data1'] *100
raw['data2'] = (raw['data1']+raw['data3'])/raw['data4']
raw['total'] = raw.sum(axis=1)


5.5 查列

5.5.1 篩選某列包含某值(raw df中 GEO CODE為CN的所有數(shù)據(jù))

raw = raw[raw['GEO_CODE']=='CN']

5.5.2 多條件篩選

raw = raw[(raw['GEO_CODE']=='CN')&(raw['METRIC']=='Conversion Rate')]

5.5.3 篩選多個列

required_key = ['User_ID','SEO visits','SEA visits','Conversion Rate']
raw = raw[raw['METRIC_KEY'].isin(required_key)]

5.6 去重

5.6.1 去重使用drop_duplicates(),主要有2個參數(shù):
subset 需要去重的值
keep,在遇到重復(fù)值時保留第一個(keep = 'first')or最后一(keep = 'last')

df = df.drop_duplicates(subset = 'column_name', keep = 'last')

5.6.2 因為去重時,保留的值很簡單是取第一個或最后一個,所以需要搭配sort_values()來保證留下的值是你想要的。sort_values()默認(rèn)是升序ascending,由小到大。

df = df.sort_values(by='column_name')
df = df.drop_duplicates(subset = 'column_name', keep = 'last')


6 Excel功能相關(guān)

6.1 Excel的數(shù)據(jù)透視表

pd.pivot_table()

主要有3個參數(shù),index, columns,value, 以及aggfunc

  • index相當(dāng)于行標(biāo)簽

  • columns相當(dāng)于列標(biāo)簽

  • value相當(dāng)于用來計算值,配合aggfunc來計算count/mean/average
    注意value不能使用index 和columns已經(jīng)使用過的值,這點和excel不同。

pivot= pd.pivot_table(raw, values = 'Response ID', index= ['Country'], columns=['NPS category'], aggfunc=np.size)

aggfunc目前用過的有計數(shù)np.size 匯總np.sum 平均np.average np.mean 中位數(shù)np.median


6.2 DataFrame的融合 (vlookup or hookup)

因為excel的公式是在某個單元格中,而DataFrame一般是一次性處理行或列的數(shù)據(jù),給某行/列根據(jù)其他行/列的數(shù)據(jù)引用賦值就相當(dāng)于表格的融合。
主要用到2個方法:

  • pd.merge()

  • pd.concat()

詳情請看下節(jié)


6.3 pd.merge()

pd.merge()非常類似數(shù)據(jù)庫中join的操作,參數(shù)很豐富:

merged_df = pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True, suffixes=('_x', '_y'), copy=True, indicator=False)

merge可以提供關(guān)系型數(shù)據(jù)庫中常用的幾種合并方式,空值會用NaN填充:
下面是幾個常用參數(shù)的詳解:
參數(shù)on

pd.merge(df1, df2, on = 'xxx') #on的參數(shù)用來確定2個表共同的column。

on在這里就相當(dāng)于vlookup中l(wèi)ookup value的定位

參數(shù)merge

pd.merge(df1, df2, how= 'xxx') #how的參數(shù)用來確定 merge method 。

Merge method和SQL join的對應(yīng)關(guān)系如下:

Merge methodSQL Join NameDescription
leftLEFT OUTER JOIN只使用左表的鍵(key)
rightRIGHT OUTER JOIN只使用右表的鍵
outerFULL OUTER JOIN使用兩表的并集的鍵
inerINNER JOIN使用兩表的交集的鍵

如果使用pd.merge實現(xiàn)vlookup時,正好二者的index就是共有值,只要
pd.merge(main_data,to_lookup_data,on ='left')就OK了

參數(shù)left_on right_on
to bu input
參數(shù)left_index right_index
to bu input


6.4 pd.concat()

如果兩個DataFrame column相同,二者上下拼接在一起 (增加數(shù)據(jù)行)

pd.concat([df1,df2])

如果兩個DataFrame index相同,二者左右拼接在一起 (增加數(shù)據(jù)列)

pd.concat([df1,df2], axis = 1)

如果有多個DataFrame, column相同的情況下:

dfs = [df1,df2,df3,df4]
result = pd.concat(dfs)

關(guān)于pd.merge()和pd.concat() 更多細(xì)節(jié)請參考官網(wǎng):
http://pandas.pydata.org/pandas-docs/stable/merging.html


7. 數(shù)據(jù)輸出

假設(shè)現(xiàn)在有一個名為raw的DataFrame需要輸出到C盤根目錄

7.1 輸出到csv

DataFrame自帶to_csv()功能,注意如果有中文建議加encoding參數(shù),如果不需要index可加 index= False 參數(shù)。

raw.to_csv('C:\File_name.csv', encoding = 'utf-8', index = False)

7.2 輸出到Excel

使用pandas自帶的 Excel Writer生成2010格式的excel,

from pandas import ExcelWriter
path = 'C:\'
writer = ExcelWriter('%sFile_name.xlsx' %path) #指定Excel文件名
raw.to_excel(writer, sheet_name = 'worksheet_name') #指定工作表名稱
writer.save()

7.3 輸出到數(shù)據(jù)庫

如果要存數(shù)據(jù)庫呢? RDBS和NOSQL

To be input..

8.使用datetime進(jìn)行時間相關(guān)的操作

在python中用datetime也可以實現(xiàn)同excel中常用的日期函數(shù)一樣的功能

8.1 創(chuàng)建現(xiàn)在的時間點為對象

import datetime
now = datetime.datetime.now()
today = datetime.datetime.today()

8.2 時間的位移

start_date = dt.date(today.year-2,today.month-1,today.day)
end_date = dt.date(today.year,today.month-3,today.day+1)

如果月份/日期 超過限制會報錯
所以可能需要寫一個循環(huán)去輸出這些日期

date_list = [] while start_date < end_date: if start_date.month < 12:
        date_list.append(start_date.strftime('%Y-%m'))
        start_date = datetime.date(start_date.year,start_date.month +1,start_date.day) else:
        date_list.append(start_date.strftime('%Y-%m'))        
        start_date = datetime.date(start_date.year+1,start_date.month-11,start_date.day)
8.3 調(diào)整格式

如上面所示,使用strftime()可以調(diào)整時間的格式,可以調(diào)整的選項非常多,參考:
http://www.runoob.com/python/att-time-strftime.html

  • %y 兩位數(shù)的年份表示(00-99)

  • %Y 四位數(shù)的年份表示(000-9999)

  • %m 月份(01-12)

  • %d 月內(nèi)中的一天(0-31)

  • %H 24小時制小時數(shù)(0-23)

  • %I 12小時制小時數(shù)(01-12)

  • %M 分鐘數(shù)(00=59)

  • %S 秒(00-59)

  • %a 本地簡化星期名稱

  • %A 本地完整星期名稱

  • %b 本地簡化的月份名稱

  • %B 本地完整的月份名稱

  • %c 本地相應(yīng)的日期表示和時間表示

  • %j 年內(nèi)的一天(001-366)

  • %p 本地A.M.或P.M.的等價符

  • %U 一年中的星期數(shù)(00-53)星期天為星期的開始

  • %w 星期(0-6),星期天為星期的開始

  • %W 一年中的星期數(shù)(00-53)星期一為星期的開始

  • %x 本地相應(yīng)的日期表示

  • %X 本地相應(yīng)的時間表示

  • %Z 當(dāng)前時區(qū)的名稱

  • %% %號本身

8.4 周數(shù)的計算
8.5 工作日的計算

Excel中有個很方便的函數(shù)叫networkdays,給出起始日期,結(jié)束日期和holiday可以計算兩個日期間的工作天數(shù)。而pandas或者datetime對這個需求支持的不好,所以找到了這個module: business_calendar
https://pypi.python.org/pypi/business_calendar/

8.5.1 計算日期之間的工作日數(shù)量
例如,求16年2月1日~29日的工作日有幾天,已知條件:

  • 周一到周五都上班

  • 2月8日到12日為休假

date1 = datetime.datetime(2016,1,31)#注意如果寫2月1日,當(dāng)天是不包含在內(nèi)的,所以寫1月31日
date2 = datetime.datetime(2016,2,29) 
cal = Calendar(workdays =[MO, TU, WE, TH, FR], holidays=['2016-02-08','2016-02-09','2016-02-10','2016-02-11','2016-02-12'])
bsday = cal.busdaycount(date1, date2)
print (bsday)

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Pandas如何安裝使用”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI