Python數(shù)據(jù)挖掘與分析----Pandas常用知識

前言

Pandas基于兩種數(shù)據(jù)類型:series與dataframe。

一個series是一個一維的數(shù)據(jù)類型棺克,其中每一個元素都有一個標簽。series類似于Numpy中元素帶標簽的數(shù)組朝抖。其中糊闽,標簽可以是數(shù)字或者字符串梳玫。

一個dataframe是一個二維的表結(jié)構(gòu)。Pandas的dataframe可以存儲許多種不同的數(shù)據(jù)類型右犹,并且每一個坐標軸都有自己的標簽提澎。你可以把它想象成一個series的字典項。

Pandas常用知識

一念链、讀取csv文件為dataframe
二盼忌、dataframe的數(shù)據(jù)概況
三、取列數(shù)據(jù)
四掂墓、取行數(shù)據(jù)
五谦纱、取某一單元格數(shù)據(jù)
六、缺失值處理
七君编、歸一化處理
八跨嘉、排序
九、索引重新編號
十吃嘿、求均值
十一祠乃、矢量化操作(批量操作)
十二、透視表

一兑燥、讀取csv文件為dataframe

Pandas很好的一點是亮瓷,可以操作表文件。輸出為dataframe格式贪嫂,這點很nice寺庄。 使用pandas.read_csv()讀取csv文件艾蓝,輸出為dataframe格式數(shù)據(jù)力崇。 這里數(shù)據(jù)data.csv數(shù)據(jù)集下載自百度地圖斗塘。

import pandas as pd
filepath = r'C:/Users/lenovo/Desktop/20180108-百度地圖/20180108-百度地圖/data.csv'
df = pd.read_csv(filepath)
#為了方便,我只顯示三行亮靴,其實結(jié)果并不是這樣子
print(df) 

檢測下數(shù)據(jù)格式

#檢測下數(shù)據(jù)格式是否為DataFrame
print(type(df))
#輸出
class 'pandas.core.frame.DataFrame

二馍盟、 DataFrame數(shù)據(jù)概況

我們想知道數(shù)據(jù)如下知識:

  • 展示dataframe前后幾條記錄

  • 顯示dataframe的列名字

  • 查看dataframe的維度情況(幾行幾列)

2.1展示dataframe前后幾行

#展示前兩條記錄(根據(jù)需要顯示條數(shù))
df.head(2)
print(df.head(2))
#展示后三條記錄
df.tail(3)
print(df.tail(3))

2.2展示dataframe列名

#展示列名
col_names = df.columns
print(col_names)
#查看下col_names格式
type(col_names)
#將col_names轉(zhuǎn)化為list
col_list = col_names.tolist()
col_list

三、從dataframe中取列數(shù)據(jù)

使用dataframe[column_name]茧吊,返回series格式數(shù)據(jù)贞岭。 series序列數(shù)據(jù)類似于list,你可以近似等同于list搓侄。 只不過返回數(shù)據(jù)中會多一列index索引瞄桨。如下面的左側(cè)數(shù)字序號

3.1 取一列數(shù)據(jù)

#這里我們一列,如取Name列數(shù)據(jù)
df['Name'][:5]
print(df['Name'][:5])

3.2取多列數(shù)據(jù)

#這里返回的數(shù)據(jù)還是dataframe格式讶踪,為了方便也只顯示前幾條記錄
cols = ['name', 'province_name', 'city_name', 'city_code', 'area', 'addr']
df[cols]
print(df[cols])

四芯侥、從dataframe中取行數(shù)據(jù)(記錄)

ix[row, col] 中括號中第一個參數(shù)row是行參數(shù),你想選擇的數(shù)據(jù)行數(shù)乳讥。 第二個參數(shù)col是列參數(shù)柱查,選擇你想要的列數(shù)據(jù)項。

4.1取一行數(shù)據(jù)

#第一行所有數(shù)據(jù)
df.ix[0, :]
print(df.ix[0, :])
#第一行的某幾列數(shù)據(jù)
col = ['Survived', 'Pclass', 'Sex']
df.ix[0, col]
print(df.ix[0, col])

4.2取多行數(shù)據(jù)

#取多行數(shù)據(jù)云石,所有列唉工。這里我選擇前5行,所有列.
#這里是不是很像切片操作汹忠。python基礎(chǔ)很重要
df.ix[:5, :]
print(df.ix[:5, :])
#取多行淋硝,某幾列
df.ix[:5, col]
print(df.ix[:5, col])

五、取某一單元格數(shù)據(jù)

取第一行第一列宽菜。df.ix[0,0] 第三行第七列奖地。df.ix[2,6]

六、缺失值處理

缺失值一般標記為NaN,處理辦法如下

df.dropna(axis)
  默認直接使用df.dropna()
  axis=1,按照行進行缺失值處理
  axis=0赋焕,按照列進行缺失值處理
df.dropna(axis=0,subset)
  axis=0,按照列方向處理subset中的列缺失值
  subset=[column]   subset含有一個或多個列名的的list

6.1按照行進行缺失值處理

#為了顯示方便参歹,只顯示前五行。
#axis=1表示按照行方向處理NAN
df.dropna(axis=1)

6.2按照列進行缺失值處理

#按照列處理缺失值(為顯示方便隆判,只顯示前5行)
df.dropna(axis=0)
#對指定列進行缺失值處理
df.dropna(axis=0,subset=['Sex','Age'])

七犬庇、歸一化處理

數(shù)據(jù)集中,不同的列的數(shù)據(jù)可能在不同量級侨嘀,如果直接進行分析臭挽。模型會認為數(shù)字大的影響力大,數(shù)字小的影響力小咬腕。 最終結(jié)果可能導(dǎo)致量級小的變量被剔除出模型欢峰。因此需要將數(shù)據(jù)歸一化,變成同一量級的數(shù)據(jù),這就是歸一化操作纽帖。 在這里我們只對一列操作下宠漩,其余列也需要操作,但為了方便懊直,這里只寫一列的歸一化處理扒吁。

處理步驟:
1.選取該列的最大值
max_value = df[col].max()
2.該列所有值均除以max_value

這里要注意,我們會用到pandas特性室囊,矢量化操作雕崩,也就是可以對一個列表進行批量同樣的操作。

#這里我們選Fare列進行歸一化融撞,先看下Fare的數(shù)據(jù)
#為了方便顯示盼铁,只顯示了前10個
df['Fare']
#這里我們選Fare列進行歸一化
max_value = df['Fare'].max()
max_value
#這里我們選Fare列進行歸一化
max_value = df['Fare'].max()
max_value
#歸一化,并將數(shù)據(jù)傳入新列new_Fare
df['new_Fare']=df['Fare']/max_value
df['new_Fare']

八尝偎、排序

df.sort_values(col,inplace,ascending)
col          對col列進行排序
inplace      布爾型值捉貌,是否原地操作。
             True時冬念,操作結(jié)果覆蓋掉原數(shù)據(jù)趁窃,原數(shù)據(jù)被修改
             False時,新建一個新數(shù)據(jù)急前,原數(shù)據(jù)未被修改
ascending    布爾型值醒陆。升序降序。 False降序裆针,True升序

#對Age列進行降序操作刨摩,不修改原始數(shù)據(jù)
df.sort_values('Age',inplace=False,ascending=False)

九、索引重新

將排序后的索引重新排序
df.reset_index(drop)
drop    為布爾型值世吨,True表示修改原始數(shù)據(jù)的索引澡刹。
                  False保留原始數(shù)據(jù)索引序列。

df.reset_index(drop=False)

十耘婚、求平均值

10.1所有列的平均值信息

df.mean()

10.2 單個列的平均值

df['Age'].mean()

十一罢浇、矢量化操作(批量操作)

一般對如list樣式的數(shù)據(jù)批量操作,需要寫循環(huán)沐祷,但是這樣費時費力嚷闭。 pandas基于numpy,可進行矢量化操作赖临,一行就能完成復(fù)雜的循環(huán)語句胞锰,而且運行效率還很高。

#對Age列批量加10
df['Age']+10).head
#對Age列批量減20
df['Age']-10

十二兢榨、透視表


df.pivot_table(index=col1,values=col2,aggfunc='numpy函數(shù)')

圍繞index參數(shù)列嗅榕,分析各個col2顺饮,aggfunc是np函數(shù),當(dāng)然這里的aggfunc也可以是自定義函數(shù)凌那。

#分析平均年齡對對生存率的影響兼雄。
#0為死亡,1為生存案怯。
#這里我們發(fā)現(xiàn)年齡對生存率有影響君旦。
import numpy as np
df.pivot_table(index='Survived',values='Age',aggfunc=np.mean)
#分析倉位等級對生存率影響澎办。0為死亡嘲碱,1為生存。
#倉位為一等二等三等分別取值1局蚀,2麦锯,3
#一等艙最高級。我們發(fā)現(xiàn)倉位等級對生存也有影響琅绅。
df.pivot_table(index='Survived',values='Pclass',aggfunc=np.mean)

pandas提取html中的表格數(shù)據(jù)

andas會在網(wǎng)頁中尋找任何符合html表形式的數(shù)據(jù)扶欣,并將其轉(zhuǎn)化WieDataFrame對象作為返回結(jié)果

Code

pandas使用方法

import pandas as pd

#header=1 顯示列名;header=0千扶,不顯示
pd.read_html(url,header)

實戰(zhàn)代碼開始

import pandas as pd
url = "http://hz.house.ifeng.com/detail/2014_10_28/50087618_1.shtml"
data = pd.read_html(url,header=1)
print(data)

注意啊料祠,這里得到的數(shù)據(jù)格式是list。


    [      序號          樓盤名稱   城區(qū)  簽約套數(shù)  預(yù)定套數(shù)    簽約面積(㎡)  簽約均價(元/㎡)
    0    1.0        龍湖春江酈城   濱江    18     0    2178.61    23757.0
    1    2.0        海威錢塘之星   濱江    13     0    629.55㎡    17398.0
    2    3.0        大家運河之星   拱墅    12     0   1052.72㎡    10457.0
    3    4.0        保利城市果嶺   下沙     8     0    743.05㎡    10457.0
        ..   ...           ...  ...   ...   ...        ...        ...
    85  86.0        廣宇錦繡桃源   拱墅     1     0     86.44㎡    12473.0
    86  87.0       景瑞申花壹號院   拱墅     1     0     89.18㎡    21529.0
    87  88.0        復(fù)地黃龍和山   西湖     0     1         0㎡        0.0
    88  89.0         中糧方圓府   下城     0     1         0㎡        0.0
    89  90.0          東方銘樓   下沙     0    16         0㎡        0.0
    90   NaN         總計簽約:  主城區(qū)   216    40  21755.55㎡        NaN
    
    [91 rows x 7 columns],    2 

DataFrame對象

df.to_json()

而只要知道數(shù)據(jù)存儲在DataFrame中澎羞,一切都變的簡單起來髓绽。 比如我很希望數(shù)據(jù)以json記形式輸出,很簡單妆绞!這只是一行代碼的事情顺呕。

import pandas as pd

data = pd.read_html(url,header=1)
#data數(shù)據(jù)是list類型,要先轉(zhuǎn)化為dataframe
df = pd.DataFrame(data)
df.to_json(orient='records')

df.to_csv()

dataframe對象括饶,還可以將數(shù)據(jù)輸出保存為csv文件

import pandas as pd

data = pd.read_html(url,header=1)
df = pd.DataFrame(data)
#encoding為gbk編碼株茶,可以在ofiice excell中看中文不亂嗎
df.to_csv('data.csv',encoding='gbk')
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市图焰,隨后出現(xiàn)的幾起案子启盛,更是在濱河造成了極大的恐慌,老刑警劉巖技羔,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驰徊,死亡現(xiàn)場離奇詭異,居然都是意外死亡堕阔,警方通過查閱死者的電腦和手機棍厂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來超陆,“玉大人牺弹,你說我怎么就攤上這事浦马。” “怎么了张漂?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵晶默,是天一觀的道長。 經(jīng)常有香客問我航攒,道長磺陡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任漠畜,我火速辦了婚禮币他,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘憔狞。我一直安慰自己蝴悉,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布瘾敢。 她就那樣靜靜地躺著拍冠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪簇抵。 梳的紋絲不亂的頭發(fā)上庆杜,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天,我揣著相機與錄音碟摆,去河邊找鬼晃财。 笑死,一個胖子當(dāng)著我的面吹牛焦履,可吹牛的內(nèi)容都是我干的拓劝。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼嘉裤,長吁一口氣:“原來是場噩夢啊……” “哼郑临!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起屑宠,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤厢洞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后典奉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體躺翻,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年卫玖,在試婚紗的時候發(fā)現(xiàn)自己被綠了公你。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡假瞬,死狀恐怖陕靠,靈堂內(nèi)的尸體忽然破棺而出迂尝,到底是詐尸還是另有隱情,我是刑警寧澤剪芥,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布垄开,位于F島的核電站,受9級特大地震影響税肪,放射性物質(zhì)發(fā)生泄漏溉躲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一益兄、第九天 我趴在偏房一處隱蔽的房頂上張望锻梳。 院中可真熱鬧,春花似錦偏塞、人聲如沸唱蒸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至庆捺,卻和暖如春古今,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背滔以。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工捉腥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人你画。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓抵碟,卻偏偏與公主長得像,于是被迫代替她去往敵國和親坏匪。 傳聞我的和親對象是個殘疾皇子拟逮,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,851評論 2 361