摘要:是一個數據分析的開源庫。與表格或關系數據庫中的表非常神似。注意帶有一個索引,類似于關系數據庫中的主鍵。的統計函數分組與聚合通過方法,可以對數據組施加一系列的函數。函數的作用是串聯,追加數據行使用函數。
pandas(Python data analysis)是一個Python數據分析的開源庫。
pandas兩種數據結構:DataFrame和Series
安裝:pandas依賴于NumPy,python-dateutil,pytz
pip install pandas
DataFrameDataFrame是一種帶標簽的二維對象。與excel表格或關系數據庫中的表非常神似??梢杂靡韵路绞絹韯摻―ataFrame:
從另一個DataFrame來創建DataFrame
從具有二維形狀的NumPy數組或者數組的復合結構來生成DataFrame
可以用Series來創建DataFrame
DataFrame可以從類似CSV之類的文件來生成
準備數據資料:http://www.exporedata.net/Dow... 下載一個csv數據文件。
from pandas.io.parsers import read_csv df = read_csv("WHO_first9cols.csv") print "Dataframe", df print "Shape", df.shape print "Length", len(df) print "Column Headers", df.columns print "Data types", df.dtypes print "Index", df.index print "Values", df.values
注意:DataFrame帶有一個索引,類似于關系數據庫中的主鍵。我們既可以手動創建,也可以自動創建。訪問df.index
如果需要遍歷數據,請使用df.values獲取所有值,非數字的數值在被輸出時標記為nan。
Series是一個由不同類型元素組成的一維數組,該數據結構也具有標簽。可以通過以下方式創建Series數據結構:
由Python字典來創建
由NumPy數組來創建
由單個標量值來創建
創建Series數據結構時,可以向構造函數遞交一組軸標簽,這些標簽通常稱為索引。
對DataFrame列執行查詢操作時,會返回一個Series
from pandas.io.parsers import read_csv import numpy as np df = read_csv("WHO_first9cols.csv") #這里對DataFrame列進行查詢操作,返回一個Series country_col = df["Country"] print "Type df", type(df) print "Type country col", type(country_col) print "Series shape", country_col.shape print "Series index", country_col.index print "Series values", country_col.values print "Series name", country_col.name print "Last 2 countries", country_col[-2:] print "Last 2 countries type", type(country_col[-2:]) #NumPy的函數同樣適用于pandas的DataFrame和Series print "df signs", np.sign(df) last_col = df.columns[-1] print "Last df column signs", last_col, np.sign(df[last_col]) print np.sum(df[last_col] - df[last_col].values)利用pandas查詢數據
數據準備:pip install Quandl 或者手動從http://www.quandl.com/SIDC/SU... 下載csv文件。
import Quandl # Data from http://www.quandl.com/SIDC/SUNSPOTS_A-Sunspot-Numbers-Annual # PyPi url https://pypi.python.org/pypi/Quandl sunspots = Quandl.get("SIDC/SUNSPOTS_A") print "Head 2", sunspots.head(2) print "Tail 2", sunspots.tail(2) last_date = sunspots.index[-1] print "Last value", sunspots.loc[last_date] print "Values slice by date", sunspots["20020101": "20131231"] print "Slice from a list of indices", sunspots.iloc[[2, 4, -4, -2]] print "Scalar with Iloc", sunspots.iloc[0, 0] print "Scalar with iat", sunspots.iat[1, 0] print "Boolean selection", sunspots[sunspots > sunspots.mean()] print "Boolean selection with column label", sunspots[sunspots.Number > sunspots.Number.mean()]
DataFrame的統計函數
describe、count、mad、median、min、max、,pde、std、var、skew、kurt
import pandas as pd from numpy.random import seed from numpy.random import rand from numpy.random import random_integers import numpy as np seed(42) df = pd.DataFrame({"Weather" : ["cold", "hot", "cold", "hot", "cold", "hot", "cold"], "Food" : ["soup", "soup", "icecream", "chocolate", "icecream", "icecream", "soup"], "Price" : 10 * rand(7), "Number" : random_integers(1, 9, size=(7,))}) print df weather_group = df.groupby("Weather") i = 0 for name, group in weather_group: i = i + 1 print "Group", i, name print group print "Weather group first ", weather_group.first() print "Weather group last ", weather_group.last() print "Weather group mean ", weather_group.mean() wf_group = df.groupby(["Weather", "Food"]) print "WF Groups", wf_group.groups #通過agg方法,可以對數據組施加一系列的NumPy函數。 print "WF Aggregated ", wf_group.agg([np.mean, np.median])DataFrame的串聯與附加操作
數據庫的數據表有內部連接和外部連接。DataFrame也有類似操作,即串聯和附加。
函數concat()的作用是串聯DataFrame,追加數據行使用append()函數。
例如
pd.concat([df[:3],df[3:]]) df[:3].append(df[5:])
pandas提供merge()或DataFrane的join()方法都能實現類似數據庫的連接操作功能。默認情況下join()方法會按照索引進行連接,不過,有時候這不符合我們的要求。
數據準備:
tips.csv
EmpNr,Amount 5,10 9,5 7,2.5
dest.csv
EmpNr,Dest 5,The Hague 3,Amsterdam 9,Rotterdam
dests = pd.read_csv("dest.csv") tips = pd.read_csv("tips.csv") #使用merge()函數按照員工編號進行連接處理 print "Merge() on key ", pd.merge(dests, tips, on="EmpNr") #用join()方法執行連接操作時,需要使用后綴來指示左、右操作對象。 print "Dests join() tips ", dests.join(tips, lsuffix="Dest", rsuffix="Tips") #用merge()執行內部連接時,更顯示的方法如下 print "Inner join with merge() ", pd.merge(dests, tips, how="inner") #稍作修改便變成完全外部連接,缺失的數據變為NaN print "Outer join ", pd.merge(dests, tips, how="outer")處理缺失的數據
缺失的數據變為NaN(非數字),還有一個類似的符號NaT(非日期). 可以使用pandas的兩個函數來進行判斷isnull(),notnull(), fillna()方法可以用一個標量值來替換缺失的數據。
import pandas as pd import numpy as np df = pd.read_csv("WHO_first9cols.csv") # Select first 3 rows of country and Net primary school enrolment ratio male (%) df = df[["Country", df.columns[-2]]][:2] print "New df ", df print "Null Values ", pd.isnull(df) print "Total Null Values ", pd.isnull(df).sum() print "Not Null Values ", df.notnull() print "Last Column Doubled ", 2 * df[df.columns[-1]] print "Last Column plus NaN ", df[df.columns[-1]] + np.nan print "Zero filled ", df.fillna(0)處理日期數據
http://pandas.pydata.org/pand...
各種頻率(freq)短碼對照表:
B business day frequency
C custom business day frequency (experimental)
D calendar day frequency
W weekly frequency
M month end frequency
SM semi-month end frequency (15th and end of month)
BM business month end frequency
CBM custom business month end frequency
MS month start frequency
SMS semi-month start frequency (1st and 15th)
BMS business month start frequency
CBMS custom business month start frequency
Q quarter end frequency
BQ business quarter endfrequency
QS quarter start frequency
BQS business quarter start frequency
A year end frequency
BA business year end frequency
AS year start frequency
BAS business year start frequency
BH business hour frequency
H hourly frequency
T, min minutely frequency
S secondly frequency
L, ms milliseconds
U, us microseconds
N nanoseconds
import pandas as pd from pandas.tseries.offsets import DateOffset import sys print "Date range", pd.date_range("1/1/1900", periods=42, freq="D") try: print "Date range", pd.date_range("1/1/1677", periods=4, freq="D") except: etype, value, _ = sys.exc_info() print "Error encountered", etype, value offset = DateOffset(seconds=2 ** 63/10 ** 9) mid = pd.to_datetime("1/1/1970") print "Start valid range", mid - offset print "End valid range", mid + offset print pd.to_datetime(["1900/1/1", "1901.12.11"]) print "With format", pd.to_datetime(["19021112", "19031230"], format="%Y%m%d") print "Illegal date", pd.to_datetime(["1902-11-12", "not a date"]) print "Illegal date coerced", pd.to_datetime(["1902-11-12", "not a date"], coerce=True)據透視表(pivot_table)
數據透視表可以用來匯總數據。pivot_table()函數及相應的DataFrame方法。
import pandas as pd from numpy.random import seed from numpy.random import rand from numpy.random import random_integers import numpy as np seed(42) N = 7 df = pd.DataFrame({ "Weather" : ["cold", "hot", "cold", "hot", "cold", "hot", "cold"], "Food" : ["soup", "soup", "icecream", "chocolate", "icecream", "icecream", "soup"], "Price" : 10 * rand(N), "Number" : random_integers(1, 9, size=(N,))}) print "DataFrame ", df #cols指定需要聚合的列,aggfunc指定聚合函數。 print pd.pivot_table(df, cols=["Food"], aggfunc=np.sum)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/38355.html
摘要:時間永遠都過得那么快,一晃從年注冊,到現在已經過去了年那些被我藏在收藏夾吃灰的文章,已經太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設置私密了,不收拾不好看呀。 ...
摘要:在基本語法入門之后,就要準備選一個研究方向了。是自己比較感興趣的方向,可是,導師這邊的數據處理肯定不能由我做主了。真的挺愁人的還有幾個月就要進行春季實習招聘了,加油總結一下機器學習方面的資料吧。 在python基本語法入門之后,就要準備選一個研究方向了。Web是自己比較感興趣的方向,可是,導師這邊的數據處理肯定不能由我做主了。paper、peper、paper……真的挺愁人的 還有幾個...
摘要:學習筆記七數學形態學關注的是圖像中的形狀,它提供了一些方法用于檢測形狀和改變形狀。學習筆記十一尺度不變特征變換,簡稱是圖像局部特征提取的現代方法基于區域圖像塊的分析。本文的目的是簡明扼要地說明的編碼機制,并給出一些建議。 showImg(https://segmentfault.com/img/bVRJbz?w=900&h=385); 前言 開始之前,我們先來看這樣一個提問: pyth...
閱讀 780·2021-09-30 09:46
閱讀 3790·2021-09-03 10:45
閱讀 3615·2019-08-30 14:11
閱讀 2549·2019-08-30 13:54
閱讀 2260·2019-08-30 11:00
閱讀 2355·2019-08-29 13:03
閱讀 1561·2019-08-29 11:16
閱讀 3588·2019-08-26 13:52