您好,登錄后才能下訂單哦!
這篇文章主要介紹了Pandas如何安裝使用,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
如果做數據分析用途建議使用Anaconda,自帶pandas numy 以及很多庫。
Anaconda 安裝地址:https://www.continuum.io/downloads
安裝之后可以在terminal 輸入 conda 開頭的命令(類似pip),例如list 查看已經安裝的包,以及進行常用的install update等動作。
絕大部分時候pandas都被使用者import為pd,根據作者的描述其實pandas是panel data的縮寫(而不是熊貓)
import pandas as pd
DataFrame是Pandas用來處理數據最常見的格式,一張二維的表,有行,列和值。類似于一個數據庫里的table 或者excel中的worksheet。如果有一個DataFrame叫df, df.columns可以得到所有的列標簽,同理df.index可以得到所有的行標簽。
raw = pd.read_excel('%s%s.xlsx' %path %filename, sheetname='Data', skiprows= 1)
數據會被讀取到一個叫raw的DataFrame中,sheetname可以指定讀某個工作表,skiprow可以跳過初始N行的數據。
raw = pd.read_csv('%s%s.csv' %path %filename)
新增列,位置在最后一列
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.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'})
把某列設為index,原index會被刪除
raw = raw.set_index('column_name')
reset_index(),新index是以0開始的遞增整數列,原index會變成一個新的列。
raw = raw.reset_index()
如果不需要原來的index中的值可以加drop = True:
raw = raw.reset_index(drop=True)
5.4.1 四則運算
raw['data1'] = raw['data1'] *100
raw['data2'] = (raw['data1']+raw['data3'])/raw['data4']
raw['total'] = raw.sum(axis=1)
5.5.1 篩選某列包含某值(raw df中 GEO CODE為CN的所有數據)
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.1 去重使用drop_duplicates(),主要有2個參數:
subset 需要去重的值
keep,在遇到重復值時保留第一個(keep = 'first')or最后一(keep = 'last')
df = df.drop_duplicates(subset = 'column_name', keep = 'last')
5.6.2 因為去重時,保留的值很簡單是取第一個或最后一個,所以需要搭配sort_values()來保證留下的值是你想要的。sort_values()默認是升序ascending,由小到大。
df = df.sort_values(by='column_name')
df = df.drop_duplicates(subset = 'column_name', keep = 'last')
pd.pivot_table()
主要有3個參數,index, columns,value, 以及aggfunc
index相當于行標簽
columns相當于列標簽
value相當于用來計算值,配合aggfunc來計算count/mean/average
注意value不能使用index 和columns已經使用過的值,這點和excel不同。
pivot= pd.pivot_table(raw, values = 'Response ID', index= ['Country'], columns=['NPS category'], aggfunc=np.size)
aggfunc目前用過的有計數np.size 匯總np.sum 平均np.average np.mean 中位數np.median
因為excel的公式是在某個單元格中,而DataFrame一般是一次性處理行或列的數據,給某行/列根據其他行/列的數據引用賦值就相當于表格的融合。
主要用到2個方法:
pd.merge()
pd.concat()
詳情請看下節
pd.merge()非常類似數據庫中join的操作,參數很豐富:
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可以提供關系型數據庫中常用的幾種合并方式,空值會用NaN填充:
下面是幾個常用參數的詳解:
參數on
pd.merge(df1, df2, on = 'xxx') #on的參數用來確定2個表共同的column。
on在這里就相當于vlookup中lookup value的定位
參數merge
pd.merge(df1, df2, how= 'xxx') #how的參數用來確定 merge method 。
Merge method和SQL join的對應關系如下:
Merge method | SQL Join Name | Description |
---|---|---|
left | LEFT OUTER JOIN | 只使用左表的鍵(key) |
right | RIGHT OUTER JOIN | 只使用右表的鍵 |
outer | FULL OUTER JOIN | 使用兩表的并集的鍵 |
iner | INNER JOIN | 使用兩表的交集的鍵 |
如果使用pd.merge實現vlookup時,正好二者的index就是共有值,只要
pd.merge(main_data,to_lookup_data,on ='left')就OK了
參數left_on right_on
to bu input
參數left_index right_index
to bu input
如果兩個DataFrame column相同,二者上下拼接在一起 (增加數據行)
pd.concat([df1,df2])
如果兩個DataFrame index相同,二者左右拼接在一起 (增加數據列)
pd.concat([df1,df2], axis = 1)
如果有多個DataFrame, column相同的情況下:
dfs = [df1,df2,df3,df4]
result = pd.concat(dfs)
關于pd.merge()和pd.concat() 更多細節請參考官網:
http://pandas.pydata.org/pandas-docs/stable/merging.html
假設現在有一個名為raw的DataFrame需要輸出到C盤根目錄
DataFrame自帶to_csv()功能,注意如果有中文建議加encoding參數,如果不需要index可加 index= False 參數。
raw.to_csv('C:\File_name.csv', encoding = 'utf-8', index = False)
使用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()
如果要存數據庫呢? RDBS和NOSQL
To be input..
在python中用datetime也可以實現同excel中常用的日期函數一樣的功能
import datetime
now = datetime.datetime.now()
today = datetime.datetime.today()
start_date = dt.date(today.year-2,today.month-1,today.day)
end_date = dt.date(today.year,today.month-3,today.day+1)
如果月份/日期 超過限制會報錯
所以可能需要寫一個循環去輸出這些日期
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)
如上面所示,使用strftime()可以調整時間的格式,可以調整的選項非常多,參考:
http://www.runoob.com/python/att-time-strftime.html
%y 兩位數的年份表示(00-99)
%Y 四位數的年份表示(000-9999)
%m 月份(01-12)
%d 月內中的一天(0-31)
%H 24小時制小時數(0-23)
%I 12小時制小時數(01-12)
%M 分鐘數(00=59)
%S 秒(00-59)
%a 本地簡化星期名稱
%A 本地完整星期名稱
%b 本地簡化的月份名稱
%B 本地完整的月份名稱
%c 本地相應的日期表示和時間表示
%j 年內的一天(001-366)
%p 本地A.M.或P.M.的等價符
%U 一年中的星期數(00-53)星期天為星期的開始
%w 星期(0-6),星期天為星期的開始
%W 一年中的星期數(00-53)星期一為星期的開始
%x 本地相應的日期表示
%X 本地相應的時間表示
%Z 當前時區的名稱
%% %號本身
Excel中有個很方便的函數叫networkdays,給出起始日期,結束日期和holiday可以計算兩個日期間的工作天數。而pandas或者datetime對這個需求支持的不好,所以找到了這個module: business_calendar
https://pypi.python.org/pypi/business_calendar/
8.5.1 計算日期之間的工作日數量
例如,求16年2月1日~29日的工作日有幾天,已知條件:
周一到周五都上班
2月8日到12日為休假
date1 = datetime.datetime(2016,1,31)#注意如果寫2月1日,當天是不包含在內的,所以寫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)
感謝你能夠認真閱讀完這篇文章,希望小編分享的“Pandas如何安裝使用”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。