Python資料分析與挖掘所需的Pandas常用知識

來源:互聯網
上載者:User

標籤: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常用知識

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.