Python數據分析與挖掘所需的Pandas常用知識
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 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的列名字
查看dataframe的維度情況(幾行幾列)
2.1展示dataframe前後幾行
#展示前兩條記錄(根據需要顯示條數) 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中取列數據
使用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_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‘)
轉自:簡書專欄:https://www.jianshu.com/u/c1ab741ef52e
Python數據分析與挖掘所需的Pandas常用知識