Pandas基於兩種數據類型:series與dataframe。html
一個series是一個一維的數據類型,其中每個元素都有一個標籤。series相似於Numpy中元素帶標籤的數組。其中,標籤能夠是數字或者字符串。python
一個dataframe是一個二維的表結構。Pandas的dataframe能夠存儲許多種不一樣的數據類型,而且每個座標軸都有本身的標籤。你能夠把它想象成一個series的字典項。json
Pandas很好的一點是,能夠操做表文件。輸出爲dataframe格式,這點很nice。 使用pandas.read_csv()讀取csv文件,輸出爲dataframe格式數據。 這裏數據data.csv數據集下載自百度地圖。數組
import pandas as pd
filepath = r'C:/Users/lenovo/Desktop/20180108-百度地圖/20180108-百度地圖/data.csv'
df = pd.read_csv(filepath)
#爲了方便,我只顯示三行,其實結果並非這樣子
print(df)複製代碼
檢測下數據格式bash
#檢測下數據格式是否爲DataFrame
print(type(df))
#輸出class 'pandas.core.frame.DataFrame複製代碼
咱們想知道數據以下知識:函數
展現dataframe先後幾條記錄ui
顯示dataframe的列名字編碼
查看dataframe的維度狀況(幾行幾列)url
2.1展現dataframe先後幾行spa
#展現前兩條記錄(根據須要顯示條數)
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轉化爲list
col_list = col_names.tolist()
col_list複製代碼
使用dataframe[column_name],返回series格式數據。 series序列數據相似於list,你能夠近似等同於list。 只不過返回數據中會多一列index索引。以下面的左側數字序號
3.1 取一列數據
#這裏咱們一列,如取Name列數據
df['Name'][:5]
print(df['Name'][:5])複製代碼
3.2取多列數據
#這裏返回的數據仍是dataframe格式,爲了方便也只顯示前幾條記錄
cols = ['name', 'province_name', 'city_name', 'city_code', 'area', 'addr']
df[cols]
print(df[cols])複製代碼
ix[row, col] 中括號中第一個參數row是行參數,你想選擇的數據行數。 第二個參數col是列參數,選擇你想要的列數據項。
4.1取一行數據
#第一行全部數據
df.ix[0, :]
print(df.ix[0, :])
#第一行的某幾列數據
col = ['Survived', 'Pclass', 'Sex']
df.ix[0, col]
print(df.ix[0, col])複製代碼
4.2取多行數據
#取多行數據,全部列。這裏我選擇前5行,全部列.
#這裏是否是很像切片操做。python基礎很重要
df.ix[:5, :]
print(df.ix[:5, :])
#取多行,某幾列
df.ix[:5, col]
print(df.ix[:5, col])複製代碼
取第一行第一列。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按照行進行缺失值處理
#按照列處理缺失值(爲顯示方便,只顯示前5行)
df.dropna(axis=0)
#對指定列進行缺失值處理
df.dropna(axis=0,subset=['Sex','Age'])
複製代碼
數據集中,不一樣的列的數據可能在不一樣量級,若是直接進行分析。模型會認爲數字大的影響力大,數字小的影響力小。 最終結果可能致使量級小的變量被剔除出模型。所以須要將數據歸一化,變成同一量級的數據,這就是歸一化操做。 在這裏咱們只對一列操做下,其他列也須要操做,但爲了方便,這裏只寫一列的歸一化處理。
處理步驟:
1.選取該列的最大值
max_value = df[col].max()
2.該列全部值均除以max_value
複製代碼
這裏要注意,咱們會用到pandas特性,矢量化操做,也就是能夠對一個列表進行批量一樣的操做。
#這裏咱們選Fare列進行歸一化,先看下Fare的數據
#爲了方便顯示,只顯示了前10個
df['Fare']
#這裏咱們選Fare列進行歸一化
max_value = df['Fare'].max()
max_value
#這裏咱們選Fare列進行歸一化
max_value = df['Fare'].max()
max_value
#歸一化,並將數據傳入新列new_Fare
df['new_Fare']=df['Fare']/max_value
df['new_Fare']
複製代碼
df.sort_values(col,inplace,ascending)
col 對col列進行排序
inplace 布爾型值,是否原地操做。
True時,操做結果覆蓋掉原數據,原數據被修改
False時,新建一個新數據,原數據未被修改
ascending 布爾型值。升序降序。 False降序,True升序
#對Age列進行降序操做,不修改原始數據
df.sort_values('Age',inplace=False,ascending=False)
複製代碼
將排序後的索引從新排序
df.reset_index(drop)
drop 爲布爾型值,True表示修改原始數據的索引。
False保留原始數據索引序列。
df.reset_index(drop=False)
複製代碼
10.1全部列的平均值信息
df.mean()
複製代碼
10.2 單個列的平均值
df['Age'].mean()
複製代碼
通常對如list樣式的數據批量操做,須要寫循環,可是這樣費時費力。 pandas基於numpy,可進行矢量化操做,一行就能完成複雜的循環語句,並且運行效率還很高。
#對Age列批量加10
df['Age']+10).head
#對Age列批量減20
df['Age']-10
複製代碼
df.pivot_table(index=col1,values=col2,aggfunc='numpy函數')
複製代碼
圍繞index參數列,分析各個col2,aggfunc是np函數,固然這裏的aggfunc也能夠是自定義函數。
#分析平均年齡對對生存率的影響。
#0爲死亡,1爲生存。
#這裏咱們發現年齡對生存率有影響。
import numpy as np
df.pivot_table(index='Survived',values='Age',aggfunc=np.mean)
#分析倉位等級對生存率影響。0爲死亡,1爲生存。
#倉位爲一等二等三等分別取值1,2,3
#一等艙最高級。咱們發現倉位等級對生存也有影響。
df.pivot_table(index='Survived',values='Pclass',aggfunc=np.mean)
複製代碼
pandas提取html中的表格數據
pandas會在網頁中尋找任何符合html表形式的數據,並將其轉化WieDataFrame對象做爲返回結果
Code
pandas使用方法
import pandas as pd
#header=1 顯示列名;header=0,不顯示
pd.read_html(url,header)
複製代碼
實戰代碼開始
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)
複製代碼
注意啊,這裏獲得的數據格式是list。
[ 序號 樓盤名稱 城區 簽約套數 預約套數 簽約面積(㎡)簽約均價(元/㎡)
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 復地黃龍和山 西湖 0 1 0㎡ 0.0
88 89.0 中糧方圓府 下城 0 1 0㎡ 0.0
89 90.0 東方銘樓 下沙 0 16 0㎡ 0.0
90 NaN 總計簽約: 主城區 216 40 21755.55㎡ NaN
[91 rows x 7 columns], 2
複製代碼
DataFrame對象
df.to_json()
而只要知道數據存儲在DataFrame中,一切都變的簡單起來。 好比我很但願數據以json記形式輸出,很簡單!這只是一行代碼的事情。
import pandas as pd
data = pd.read_html(url,header=1)
#data數據是list類型,要先轉化爲dataframe
df = pd.DataFrame(data)
df.to_json(orient='records')複製代碼
df.to_csv()
dataframe對象,還能夠將數據輸出保存爲csv文件
import pandas as pd
data = pd.read_html(url,header=1)
df = pd.DataFrame(data)
#encoding爲gbk編碼,能夠在office excel中看中文不亂嗎
df.to_csv('data.csv',encoding='gbk')複製代碼