01Pandas_數據結構

Pandas數據結構

做python數據分析,數據挖掘,機器學習的童鞋應該都離不開pandas。在做數據的預處理的時候pandas尤為給力。

本文主要介紹pandas中的兩種數據結構:series,dataframe。

import pandas as pd

1.Series

首先來介紹series數據結構。

series 類似于一維數組的對象。對于series基本要掌握的是:

  1. 構建series
  2. 獲取series中的數據與索引
  3. 預覽數據
  4. 通過索引獲取數據
  5. Series的運算
  6. name屬性

1.1 構建Series

  • 通過list構建Series

向pd.Series()中傳入一個list。就等于將這個list轉換成了Series數據格式了。

可以通過打印數據類型來檢查,顯示的是Series

ser_obj = pd.Series(range(10, 20))print type(ser_obj)
<class 'pandas.core.series.Series'>
  • 通過字典dict構建Series

dict中每個key其實是索引,對應的value是值。所有的值的數據類型需一致。

year_data = {2001: 17.8, 2002: 20.1, 2003: 16.5}
ser_obj2 = pd.Series(year_data)
print ser_obj2.head()
2001    17.8
2002    20.1
2003    16.5
dtype: float64

1.2 獲取數據與索引

對于Series, 使用.values方法就能獲取它的值;使用.index方法就能獲取它的索引。

下面這個例子獲取的索引并沒有直接逐個打印出來,而是打印了一個RangeIndex,里面的參數表示起始數(包括),結尾數(不包括),步長為1。

# 獲取數據
print ser_obj.values# 獲取索引
print ser_obj.index
[10 11 12 13 14 15 16 17 18 19]
RangeIndex(start=0, stop=10, step=1)

1.3 預覽數據

如果數據量太大,但又想看看數據的格式,那么可以提取前幾條數據來瞧一瞧。

直接使用.head(),如果里面不傳入參數,那么默認提取前5條數據;括號里也可以出傳入參數來指定提取前面n條。

# 預覽數據
print ser_obj.head(3)
0    10
1    11
2    12
dtype: int64

1.4 獲取數據

可以通過索引獲取Series中對應位置的value。索引放在中括號[]中。

#通過索引獲取數據
print ser_obj[0]
print ser_obj[8]
10
18

1.5 運算

對1個Series 進行加減乘數的運算時,表示對Series中的每個元素都做一次運算,然后輸出相同長度的Series。

# 索引與數據的對應關系仍保持在數組運算的結果中
print ser_obj * 3
0    30
1    33
2    36
3    39
4    42
5    45
6    48
7    51
8    54
9    57
dtype: int64

除了普通的加減乘除等運算,還可以進行布爾運算,如下,會將所有大于15的值輸出成True, 小于15的值輸出成False。

print ser_obj > 15
0    False
1    False
2    False
3    False
4    False
5    False
6     True
7     True
8     True
9     True
dtype: bool

1.6 name屬性

可以對Series中的Index和Values添加自定義的名字。

# name屬性
ser_obj2.name = 'score'
ser_obj2.index.name = 'year'
print ser_obj2.head()
year
2001    17.8
2002    20.1
2003    16.5
Name: score, dtype: float64

2.DataFrame

DataFrame類似于多維數組或表格數據,與excel類似。

每列數據可以是不同的類型,但是同一列的數據需保持一致數據類型。

DataFrame的索引包括行索引與列索引。

掌握DataFrame的基本使用,需要熟悉以下幾個要點。

  1. 構建DataFrame的兩種方法:ndarray構建,dict構建
  2. 通過索引獲取數據
  3. 增加與刪除數據
import numpy as np
  • ?

2.1 構建DataFrame

  • 通過ndarray構建DataFram
# 首先創建一個ndarray (大小是5*4)
array = np.random.randn(5,4)
print array# 將ndarray傳入pd.DataFrame()中,即得到了一個DataFrame
df_obj = pd.DataFrame(array)
print df_obj.head()
[[-1.15943918  0.41562598  0.24219151 -0.54127251][-0.72949761  0.7299977  -0.35770911 -1.55597979][-0.26508669  0.73079105  0.019037   -0.28775191][ 2.35757276  0.54826604 -1.10932131  0.36925581][ 0.60940029  0.11843865 -0.30061918  0.44980428]]0         1         2         3
0 -1.159439  0.415626  0.242192 -0.541273
1 -0.729498  0.729998 -0.357709 -1.555980
2 -0.265087  0.730791  0.019037 -0.287752
3  2.357573  0.548266 -1.109321  0.369256
4  0.609400  0.118439 -0.300619  0.449804

上面構建好的DataFrame可見左邊有一列是行索引,上面有一行是列索引。如果沒有特殊指定,系統會默認生成行索引與列索引的。

  • 通過dict構建DataFrame

還記得通過字典構建series時,Key是作為索引的;在DataFrame中,Key是作為列索引(列名)。

講dict傳給pd.DataFrame()中即構成了一個DataFrame

dict_data = {'A': 1., 'B': pd.Timestamp('20161223'),'C': pd.Series(1, index=list(range(4)),dtype='float32'),'D': np.array([3] * 4,dtype='int32'),'E' : pd.Categorical(["Python","Java","C++","C#"]),'F' : 'wangxiaocao' }
#print dict_data
df_obj2 = pd.DataFrame(dict_data)
print df_obj2.head()
     A          B    C  D       E            F
0  1.0 2016-12-23  1.0  3  Python  wangxiaocao
1  1.0 2016-12-23  1.0  3    Java  wangxiaocao
2  1.0 2016-12-23  1.0  3     C++  wangxiaocao
3  1.0 2016-12-23  1.0  3      C#  wangxiaocao

2.2 通過索引獲取數據

這里先簡單介紹一下通過列索引來獲取數據。

通過列索引獲取的數據顧名思義就是獲取處該索引的一整列。著一整列的數據其實就是Series的數據格式。

所以DataFrame可以看成是由一列一列的series組成的。

有兩種方式:
1. df_obj2[‘F’]
2. df_obj2.F

# 方式1
print df_obj2['F']
print type(df_obj2['F'])# 方式2
print df_obj2.F
0    wangxiaocao
1    wangxiaocao
2    wangxiaocao
3    wangxiaocao
Name: F, dtype: object
<class 'pandas.core.series.Series'>
0    wangxiaocao
1    wangxiaocao
2    wangxiaocao
3    wangxiaocao
Name: F, dtype: object

2.3 增加與刪除列

# 增加列
df_obj2['G'] = df_obj2['D'] + 4
print df_obj2.head()
     A          B    C  D       E            F  G
0  1.0 2016-12-23  1.0  3  Python  wangxiaocao  7
1  1.0 2016-12-23  1.0  3    Java  wangxiaocao  7
2  1.0 2016-12-23  1.0  3     C++  wangxiaocao  7
3  1.0 2016-12-23  1.0  3      C#  wangxiaocao  7
# 刪除列
del df_obj2['G'] 
print df_obj2.head()
     A          B    C  D       E            F
0  1.0 2016-12-23  1.0  3  Python  wangxiaocao
1  1.0 2016-12-23  1.0  3    Java  wangxiaocao
2  1.0 2016-12-23  1.0  3     C++  wangxiaocao
3  1.0 2016-12-23  1.0  3      C#  wangxiaocao

3.索引對象 Index

pandas的兩種數據格式都與索引息息相關,這里羅列一下索引的相關知識。

首先要明確索引的特性:不可變!索引

# 索引對象不可變
df_obj2.index[0] = 2
---------------------------------------------------------------------------TypeError                                 Traceback (most recent call last)<ipython-input-17-7f40a356d7d1> in <module>()1 # 索引對象不可變
----> 2 df_obj2.index[0] = 2/home/cc/anaconda2/lib/python2.7/site-packages/pandas/indexes/base.pyc in __setitem__(self, key, value)1243 1244     def __setitem__(self, key, value):
-> 1245         raise TypeError("Index does not support mutable operations")1246 1247     def __getitem__(self, key):TypeError: Index does not support mutable operations

常見的Index種類有:

  1. Index
  2. Int64Index
  3. MultiIndex:層級索引
  4. DatetimeINdex:時間戳類型的索引
print type(ser_obj.index)
print type(df_obj2.index)print df_obj2.index
<class 'pandas.indexes.range.RangeIndex'>
<class 'pandas.indexes.numeric.Int64Index'>
Int64Index([0, 1, 2, 3], dtype='int64')

注:部分例子來自于小象學院Robin課程

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456150.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456150.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456150.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

加密函數

MD5&#xff1a;密碼為web頁面做準備&#xff0c;建議使用MD5 PASSWORD() :修改當前用戶或其他用戶密碼 mysql> SELECT MD5(admin); #對admin進行MD5的加密&#xff08;32位&#xff09;----------------------------------| MD5(admin) |--------------------------------…

如何使用notepad運行python程序

關于使用notepad運行python程序 首先要確保python解釋器已經安裝成功,查看方法,windows可以在命令提示符中查看,通過按下winR鍵,調出運行窗口,在輸入框中輸入cmd回車,然后在命令行中輸入python,若出現版本信息,例如Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC…

H.264學習歷程(天之驕子)

半年前&#xff0c;我知道了H.264這個名詞。那個時候決定學習H.264&#xff0c;可是我連資料都不知道如何收集。而且整個學校就只有我一個人在學習H.264&#xff0c;找不到人交流&#xff0c;所以那個時候學得真的是舉步維艱&#xff0c;很痛苦&#xff0c;而能在網上認識一個學…

插入排序:表折半插入

在前一篇插入排序&#xff1a;表插入中。我們用靜態鏈表的存儲方式。直接插入的策略&#xff0c;構建了一種新的插入排序算法&#xff1a;表插入。有人可能會想到&#xff1a;相同是靜態鏈表的形式&#xff0c;為什么不使用更高效的折半插入策略呢&#xff1f;這樣的想法真的非…

C++編譯報錯:重復定義

http://note.youdao.com/noteshare?idcb2bed862a2daae89775603168f297af轉載于:https://www.cnblogs.com/taiyang-li/p/6637093.html

【機器學習】sklearn實現---歸類為5大類

sklearn實現---歸類為5大類 sklearn.preprocessing.scale()&#xff08;最常用&#xff0c;易受異常值影響&#xff09;sklearn.preprocessing.StandardScaler()sklearn.preprocessing.minmax_scale()&#xff08;一般縮放到[0,1]之間&#xff0c;若新數據集最大最小值范圍有變…

關于安裝deepin+window10雙系統有時沒有聲音的問題

關于安裝deepinwindow10雙系統有時沒有聲音的問題 這個問題小編目前還沒有解決,求大神幫忙! deepin社區官網:深度科技社區 還可以參考一下其他的教程 深粉交流:新手剛剛安裝好DEEPIN&#xff0c;但沒有聲音&#xff0c;怎而解決&#xff1f; 冰封飛飛(云網牛站):在Deepin系統中…

如何讀H.264的標準和代碼

首先&#xff0c;還是要弄清楚編解碼的流程和 H.264 的關鍵技術&#xff0c;看白皮書就知道了&#xff0c;另外 H.264 綜述類的文章和別人的學位論文一般也會講到&#xff1b; 其次&#xff0c;弄清楚代碼的各個函數實現的功能&#xff0c;這個可以看看 JM 代碼里各個函數前面的…

Kafka官方文檔翻譯——實現

IMPLEMENTATION 1. API Design Producer APIs Producer API封裝了底層兩個Producer&#xff1a; kafka.producer.SyncProducerkafka.producer.async.AsyncProducerclass Producer {/* Sends the data, partitioned by key to the topic using either the *//* synchronous or t…

【機器學習】熵、決策樹、隨機森林 總結

一、熵 公式&#xff1a; ?∑i1np(xi)?log2p(xi)-\sum_{i 1}^{n}{p(xi)*log_2p(xi)}?i1∑n?p(xi)?log2?p(xi) ∑i1np(xi)?log21p(xi)\sum_{i1}^{n}p(xi)*log_2\frac{1}{p(xi)}i1∑n?p(xi)?log2?p(xi)1? import numpy as np# 賬號是否真實&#xff1a;3no&#xff…

HDU 4857 逃生(拓撲排序)

拓撲排序 一.定義 對一個有向無環圖(Directed Acyclic Graph簡稱DAG)G進行拓撲排序&#xff0c;是將G中所有頂點排成一個線性序列&#xff0c;使得圖中任意一對頂點u和v&#xff0c;若<u&#xff0c;v> ∈E(G)&#xff0c;則u在線性序列中出現在v之前。 通常&#xff0c;…

關于deepin系統安裝design compiler的問題解答

關于deepin系統安裝design compiler的問題解答 Design?Compiler是Synopsys綜合軟件的核心產品。它提供約束驅動時序最優化&#xff0c;并支持眾多的設計類型&#xff0c;把設計者的HDL描述綜合成與工藝相關的門級設計&#xff1b;它能夠從速度、面積和功耗等方面來優化組合電…

iOS 數據持久化-- FMDB

一、簡介 1.什么是FMDB FMDB是iOS平臺的SQLite數據庫框架 FMDB以OC的方式封裝了SQLite的C語言API 2.FMDB的優點 使用起來更加面向對象&#xff0c;省去了很多麻煩、冗余的C語言代碼 對比蘋果自帶的Core Data框架&#xff0c;更加輕量級和靈活 提供了多線程安全的數據庫操作方法…

【機器學習】交叉驗證篩選參數K值和weight

交叉驗證 導包 import numpy as npfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn import datasets#model_selection &#xff1a;模型選擇 # cross_val_score: 交叉 &#xff0c;validation&#xff1a;驗證&#xff08;測試&#xff09; #交叉驗證 from s…

jqGrid列的統計

$("#List").jqGrid({ url: "${pageContext.request.contextPath}/cbfx/getCbhzList.do", datatype: "json", mtype: GET, colNames:["成本類別","費用","去年同期費用","備注"], colMod…

手機只能簽榮耀!最忠誠代言人胡歌喊你去天貓超品日

在你心中&#xff0c;男神胡歌是什么樣子&#xff1f;“御劍乘風來&#xff0c;除魔天地間。”也許是《仙劍奇俠傳》里飛揚跋扈、青春不羈的俠客李逍遙。“遍識天下英雄路&#xff0c;俯首江左有梅郎。”也許是《瑯铘榜》中才智冠天下&#xff0c;遠在江湖卻名動帝輦的麒麟才子…

歐式距離與曼哈頓距離

歐式距離&#xff0c;其實就是應用勾股定理計算兩個點的直線距離 二維空間的公式 其中&#xff0c; 為點與點之間的歐氏距離&#xff1b;為點到原點的歐氏距離。 三維空間的公式 n維空間的公式 曼哈頓距離&#xff0c;就是表示兩個點在標準坐標系上的絕對軸距之和&#xff1a…

在maven pom.xml中加載不同的properties ,如localhost 和 dev master等jdbc.properties 中的鏈接不一樣...

【參考】&#xff1a;maven pom.xml加載不同properties配置[轉] 首先 看看效果&#xff1a; 點開我們項目中的Maven projects 后&#xff0c;會發現右側 我們profile有個可勾選選項。默認勾選localhost。localhost對應項目啟動后&#xff0c;會加載配置左側localhost文件夾下面…

4.8-全棧Java筆記:包機制

包機制是java中管理類的重要手段。 開發中&#xff0c;我們會遇到大量同名的類&#xff0c;通過包我們很容易對解決類重名的問題&#xff0c;也可以實現對類的有效管理。 包對于類&#xff0c;相當于&#xff0c;文件夾對于文件的作用。package我們通過package實現對類的管理&a…

python安裝以及版本檢測

Windows 安裝 Python 3 目前Python有兩個大版本&#xff0c;分別是 2.X 和 3.X &#xff0c;我們的教程基于最新版本 3.6.1 首先我們需要獲取Python的安裝包&#xff0c;可以從官網獲取&#xff0c;如果你因為沒有VPN工具而無法訪問官網的話&#xff0c;我已經將它放在網盤了&…