標籤:false table 下載 csv檔案 pcl detail 西湖 百度地圖 pos
Python資料分析與挖掘所需的Pandas常用知識
前言
Pandas基於兩種資料類型:series與dataframe。
一個series是一個一維的資料類型,其中每一個元素都有一個標籤。series類似於Numpy中元素帶標籤的數組。其中,標籤可以是數字或者字串。
一個dataframe是一個二維的表結構。Pandas的dataframe可以儲存許多種不同的資料類型,並且每一個座標軸都有自己的標籤。你可以把它想象成一個series的字典項。
Pandas常用知識
一、讀取csv檔案為dataframe
二、dataframe的資料概況
三、取列資料
四、取行資料
五、取某一儲存格資料
六、缺失值處理
七、歸一化處理
八、排序
九、索引重新編號
十、求均值
十一、向量化操作(大量操作)
十二、透視表
一、讀取csv檔案為dataframe
Pandas很好的一點是,可以動作表檔案。輸出為dataframe格式,這點很nice。 使用pandas.read_csv()讀取csv檔案,輸出為dataframe格式資料。 這裡資料data.csv資料集下載自百度地圖。
import pandas as pdfilepath = r‘C:/Users/lenovo/Desktop/20180108-百度地圖/20180108-百度地圖/data.csv‘df = pd.read_csv(filepath)#為了方便,我只顯示三行,其實結果並不是這樣子print(df)
檢測下資料格式
#檢測下資料格式是否為DataFrameprint(type(df))
#輸出class ‘pandas.core.frame.DataFrame
二、 DataFrame資料概況
我們想知道資料如下知識:
展示dataframe前後幾條記錄
顯示dataframe的列名字
查看dataframe的維度情況(幾行幾列)
2.1展示dataframe前後幾行
#展示前兩條記錄(根據需要顯示條數)df.head(2)print(df.head(2))#展示後三條記錄df.tail(3)print(df.tail(3))
2.2展示dataframe列名
#展示列名col_names = df.columnsprint(col_names)#查看下col_names格式type(col_names)#將col_names轉化為listcol_list = col_names.tolist()col_list
三、從dataframe中取列資料
使用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])
四、從dataframe中取行資料(記錄)
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])
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_Faredf[‘new_Fare‘]=df[‘Fare‘]/max_valuedf[‘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列批量加10df[‘Age‘]+10).head#對Age列批量減20df[‘Age‘]-10
十二、透視表
df.pivot_table(index=col1,values=col2,aggfunc=‘numpy函數‘)
圍繞index參數列,分析各個col2,aggfunc是np函數,當然這裡的aggfunc也可以是自訂函數。
#分析平均年齡對對生存率的影響。#0為死亡,1為生存。#這裡我們發現年齡對生存率有影響。import numpy as npdf.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 pdurl = "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.01 2.0 海威錢塘之星 濱江 13 0 629.55㎡ 17398.02 3.0 大家運河之星 拱墅 12 0 1052.72㎡ 10457.03 4.0 保利城市果嶺 下沙 8 0 743.05㎡ 10457.0 .. ... ... ... ... ... ... ...85 86.0 廣宇錦繡桃源 拱墅 1 0 86.44㎡ 12473.086 87.0 景瑞申花壹號院 拱墅 1 0 89.18㎡ 21529.087 88.0 複地黃龍和山 西湖 0 1 0㎡ 0.088 89.0 中糧方圓府 下城 0 1 0㎡ 0.089 90.0 東方銘樓 下沙 0 16 0㎡ 0.090 NaN 總計簽約: 主城區 216 40 21755.55㎡ NaN[91 rows x 7 columns], 2
DataFrame對象
df.to_json()
而只要知道資料存放區在DataFrame中,一切都變的簡單起來。 比如我很希望資料以json記形式輸出,很簡單!這隻是一行代碼的事情。
import pandas as pddata = pd.read_html(url,header=1)#data資料是list類型,要先轉化為dataframedf = pd.DataFrame(data)df.to_json(orient=‘records‘)
df.to_csv()
dataframe對象,還可以將資料輸出儲存為csv檔案
import pandas as pddata = pd.read_html(url,header=1)df = pd.DataFrame(data)#encoding為gbk編碼,可以在office excel中看中文不亂嗎df.to_csv(‘data.csv‘,encoding=‘gbk‘)
轉自:簡書專欄:https://www.jianshu.com/u/c1ab741ef52e
Python資料分析與挖掘所需的Pandas常用知識