查看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")
Python愛好者社區歷史文章大合集:
小編的Python入門視頻課程!!!
崔老師爬蟲實戰案例免費學習視頻。
丘老師數據科學入門指導免費學習視頻。
陳老師數據分析報告製作免費學習視頻。
玩轉大數據分析!Spark2.X+Python 精華實戰課程免費學習視頻。
丘老師Python網路爬蟲實戰免費學習視頻。