前言
Pandas基于兩種資料類型:series與dataframe。
一個series是一個一維的資料類型,其中每一個元素都有一個标簽。series類似于Numpy中元素帶标簽的數組。其中,标簽可以是數字或者字元串。
一個dataframe是一個二維的表結構。Pandas的dataframe可以存儲許多種不同的資料類型,并且每一個坐标軸都有自己的标簽。你可以把它想象成一個series的字典項。
一、讀取csv檔案為dataframe
二、dataframe的資料概況
三、取列資料
四、取行資料
五、取某一單元格資料
六、缺失值處理
七、歸一化處理
八、排序
九、索引重新編号
十、求均值
十一、矢量化操作(批量操作)
十二、透視表
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)
檢測下資料格式
#檢測下資料格式是否為DataFrame
print(type(df))
#輸出class 'pandas.core.frame.DataFrame
我們想知道資料如下知識:
展示dataframe前後幾條記錄
顯示dataframe的列名字
檢視dataframe的次元情況(幾行幾列)
#展示前兩條記錄(根據需要顯示條數)
df.head(2)
print(df.head(2))
#展示後三條記錄
df.tail(3)
print(df.tail(3))
#展示列名
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索引。如下面的左側數字序号
#這裡我們一列,如取Name列資料
df['Name'][:5]
print(df['Name'][:5])
#這裡傳回的資料還是dataframe格式,為了友善也隻顯示前幾條記錄
cols = ['name', 'province_name', 'city_name', 'city_code', 'area', 'addr']
df[cols]
print(df[cols])
ix[row, col] 中括号中第一個參數row是行參數,你想選擇的資料行數。 第二個參數col是列參數,選擇你想要的列資料項。
#第一行所有資料
df.ix[0, :]
print(df.ix[0, :])
#第一行的某幾列資料
col = ['Survived', 'Pclass', 'Sex']
df.ix[0, col]
print(df.ix[0, col])
#取多行資料,所有列。這裡我選擇前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
#按照列處理缺失值(為顯示友善,隻顯示前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
#歸一化,并将資料傳入新列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)
df.mean()
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表形式的資料,并将其轉化WieDataFrame對象作為傳回結果
pandas使用方法
#header=1 顯示列名;header=0,不顯示
pd.read_html(url,header)
實戰代碼開始
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
df.to_json()
而隻要知道資料存儲在DataFrame中,一切都變的簡單起來。 比如我很希望資料以json記形式輸出,很簡單!這隻是一行代碼的事情。
#data資料是list類型,要先轉化為dataframe
df = pd.DataFrame(data)
df.to_json(orient='records')
df.to_csv()
dataframe對象,還可以将資料輸出儲存為csv檔案
#encoding為gbk編碼,可以在office excel中看中文不亂嗎
df.to_csv('data.csv',encoding='gbk')
轉自:https://mp.weixin.qq.com/s?__biz=MzI5NDY1MjQzNA==&mid=2247485475&idx=1&sn=81f5a117335181a9e846b84e20bd921a&chksm=ec5ed75edb295e48538eea0e7c28d4bbbffdd3405784d3019db5f65592424ef4a0fab18f73ab&mpshare=1&scene=23&srcid=0208YIogc0ZyLNbYf1ISMvMx#rd