1. 程式人生 > >全體快三源碼開發Python數據分析與挖掘所需的Pandas常用知識

全體快三源碼開發Python數據分析與挖掘所需的Pandas常用知識

下載 多列 方向 index索引 結果 數據行 value com 維度

前言

全體快三源碼開發 (http://www.1159880099.com) QQ1159880099

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://hxforum.com/thread-397-1-1.html" 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‘)

全體快三源碼開發Python數據分析與挖掘所需的Pandas常用知識