機(jī)器學(xué)習(xí)三劍客之Pandas

pandas

Pandas是基于Numpy開發(fā)出的,專門用于數(shù)據(jù)分析的開源Python庫

Pandas的兩大核心數(shù)據(jù)結(jié)構(gòu)

  • Series(一維數(shù)據(jù))
Series
創(chuàng)建Series的方法
允許索引重復(fù)
  • DataFrame(多特征數(shù)據(jù),既有行索引,又有列索引)
DataFrame
索引方法
# 創(chuàng)建一個(gè)3行4列的DataFrame類型數(shù)據(jù)
data_3_4 = pd.DataFrame(np.arange(10, 22).reshape(3, 4))
# 打印數(shù)據(jù)
print(data_3_4)

# 打印第一行數(shù)據(jù)
print(data_3_4[:1])
# 打印第一列數(shù)據(jù)
print(data_3_4[:][0])
  • DataFrame的屬性
原始數(shù)據(jù)
DataFrame的屬性
# 讀取數(shù)據(jù)
result = pd.read_csv("./students_score.csv")
# 數(shù)據(jù)的形狀
result.shape
# 每列數(shù)據(jù)的 類型信息
result.dtypes
# 數(shù)據(jù)的維數(shù)
result.ndim
# 數(shù)據(jù)的索引(起/始/步長(zhǎng))
result.index
# 打印每一列 屬性的名稱
result.columns
# 將數(shù)據(jù)放到數(shù)組中顯示
result.values
整體查詢
# 打印前5個(gè)
print("-->前5個(gè):")
print(result.head(5))
# 打印后5個(gè)
print("-->后5個(gè):")
print(result.tail(5))
# 打印描述信息(實(shí)驗(yàn)中好用)
print("-->描述信息:")
print(result.describe())

Panda數(shù)據(jù)讀取(以csv為例)

pandas.read_csv(filepath_or_buffer, sep=",", names=None, usecols = None)

filepath_or_buffer : 文件路徑(本地路徑或url路徑)
sep: 分隔符
names: 列索引的名字
usecols: 指定讀取的列名

返回的類型: DataFrame  
讀取并返回?cái)?shù)據(jù)
  • Dataframe通過布爾索引過濾數(shù)據(jù)
布爾索引
# 布爾索引(查詢) 找出年齡大于23歲的人
result[result["age"]>23]

小案例: 分析2006年至2016年1000部IMDB電影數(shù)據(jù)

2006年----2016年IMDB最受歡迎的1000部電影
評(píng)分降序排列
統(tǒng)計(jì)時(shí)長(zhǎng)
IMDB_1000 = pd.read_csv("./IMDB-Movie-Data.csv")
# 獲取數(shù)據(jù)字段
print(IMDB_1000.dtypes)
# 根據(jù)1000部電影評(píng)分進(jìn)行降序排列,參數(shù)ascending, 默認(rèn)為True(升序), 這里為False(降序)
IMDB_1000.sort_values(by="Rating", ascending=False)
# 時(shí)間最長(zhǎng)的電影
IMDB_1000[IMDB_1000["Runtime (Minutes)"]==IMDB_1000["Runtime (Minutes)"].max()]
# 時(shí)間最短的電影
IMDB_1000[IMDB_1000["Runtime (Minutes)"]==IMDB_1000["Runtime (Minutes)"].min()]
# 電影時(shí)長(zhǎng)平均值
IMDB_1000["Runtime (Minutes)"].mean()

數(shù)據(jù)處理

  • 存在缺失值, 直接刪除數(shù)據(jù)(刪除存在缺失值的樣本)
刪除存在缺失值的樣本
# 刪除存在缺失值的樣本
IMDB_1000.dropna()

不推薦的操作: 按列刪除缺失值為IMDB_1000.dropna(axis=1)

  • 存在缺失值, 直接填充數(shù)據(jù)fillna
填充空缺值
使用平均值填充數(shù)據(jù)
# 為一些電影缺失的總票房添加平均值
IMDB_1000["Revenue (Millions)"].fillna(IMDB_1000["Revenue (Millions)"].mean(), inplace=True)

小案例: 乳腺癌數(shù)據(jù)預(yù)處理 (在線獲取數(shù)據(jù),并替換缺失符號(hào)為標(biāo)準(zhǔn)缺失符號(hào)np.nan)

替換默認(rèn)的缺失符號(hào)
各列命名
讀取原始數(shù)據(jù)
# 在線讀取數(shù)據(jù),并按照說明文檔, 并對(duì)各列信息進(jìn)行命名
bcw = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data", names=["Sample code number","Clump Thickness","Uniformity of Cell Size","Uniformity of Cell Shape", "Marginal Adhesion","Single Epithelial Cell Size","Bare Nuclei","Bland Chromatin","Normal Nucleoli","Mitoses","Class:"])
預(yù)處理,把?替換為np.nan

小案例: 日期格式轉(zhuǎn)換 數(shù)據(jù)來源

facebook
日期格式轉(zhuǎn)換
# 讀取前10行數(shù)據(jù)
train = pd.read_csv("./train.csv", nrows = 10)
# 將數(shù)據(jù)中的time轉(zhuǎn)換為最小分度值為秒(s)的計(jì)量單位
train["time"] = pd.to_datetime(train["time"], unit="s")
  • 從日期中拆分出新的列
新增列
# 新增列year, month, weekday
train["year"] = pd.DatetimeIndex(train["time"]).year
train["month"] = pd.DatetimeIndex(train["time"]).month
train["weekday"] = pd.DatetimeIndex(train["time"]).weekday

數(shù)據(jù)表的合并(merge)

數(shù)據(jù)
user_info.csv
user_id,姓名,age
1,徐三,23
2,徐四,22
3,寶兒,210
4,楚嵐,21
5,王也,24
6,諸葛青,21
7,天師,89
8,呂梁,24
9,夏禾,26
goods_info.csv
goods_id,goods_name
G10,三只松鼠
G12,MacBook
G13,iPad
G14,iPhone
order_info.csv
order_id,use_id,goods_name
as789,1,三只松鼠
sd567,2,MacBook
hj456,4,iPad
合并過程
# 讀取3張表
user_info = pd.read_csv("./user_info.csv")
order_info = pd.read_csv("./order_info.csv")
goods_info = pd.read_csv("./goods_info.csv")
# 合并三張表
u_o = pd.merge(user_info, order_info, how="left", on=["user_id", "user_id"])
u_o_g = pd.merge(u_o, goods_info, how="left", on=["goods_name", "goods_name"])
  • 建立交叉表(用于計(jì)算分組的頻率)
交叉表
# 交叉表, 表示出用戶姓名,和商品名之間的關(guān)系
user_goods = pd.crosstab(u_o_g["姓名"],u_o_g["goods_name"])

Pandas的分組和聚合(重要)

小案例: 星巴克全球分布情況 數(shù)據(jù)來源

全球星巴克分布情況

讀取全球星巴克的位置數(shù)據(jù)
每個(gè)國家星巴克的數(shù)量
每個(gè)國家每個(gè)省份星巴克的數(shù)量
starbucks = pd.read_csv("./directory.csv")
# 統(tǒng)計(jì)每個(gè)國家星巴克的數(shù)量
starbucks.groupby(["Country"]).count()
# 統(tǒng)計(jì)每個(gè)國家 每個(gè)省份 星巴克的數(shù)量
starbucks.groupby(["Country", "State/Province"]).count()
  • 全球各國星巴克數(shù)量排名
全球星巴克數(shù)量排名
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市静汤,隨后出現(xiàn)的幾起案子习蓬,更是在濱河造成了極大的恐慌榜苫,老刑警劉巖每瞒,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件云稚,死亡現(xiàn)場(chǎng)離奇詭異涵妥,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)乖寒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門猴蹂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人楣嘁,你說我怎么就攤上這事磅轻。” “怎么了马澈?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵瓢省,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我痊班,道長(zhǎng)勤婚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任涤伐,我火速辦了婚禮馒胆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘凝果。我一直安慰自己祝迂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布器净。 她就那樣靜靜地躺著型雳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪山害。 梳的紋絲不亂的頭發(fā)上纠俭,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音浪慌,去河邊找鬼冤荆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛权纤,可吹牛的內(nèi)容都是我干的钓简。 我是一名探鬼主播乌妒,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼外邓!你這毒婦竟也來了撤蚊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤损话,失蹤者是張志新(化名)和其女友劉穎拴魄,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體席镀,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年夏漱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了豪诲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡挂绰,死狀恐怖屎篱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情葵蒂,我是刑警寧澤交播,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站践付,受9級(jí)特大地震影響秦士,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜永高,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一隧土、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧命爬,春花似錦曹傀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至艇抠,卻和暖如春幕庐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背练链。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國打工翔脱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人媒鼓。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓届吁,卻偏偏與公主長(zhǎng)得像错妖,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子疚沐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容