0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

介紹pandas的兩種數(shù)據(jù)結構

lviY_AI_shequ ? 來源:未知 ? 作者:李倩 ? 2018-07-25 17:50 ? 次閱讀

對于Python而言,坊間早有這種說法:在有了 pandas之后,Python才算有了數(shù)據(jù)分析的能力。在此之前,要想用Python來做數(shù)據(jù)分析,可能就沒那么友好了,可見pandas在學習數(shù)據(jù)分析時候的重要程度。對于 pandas來說,很多功能的實現(xiàn)也是要基于科學計算庫 numpy的,所以 numpy+ pandas的組合在Python數(shù)據(jù)分析中就顯得尤為關鍵。

從本篇開始,小編就給大家詳細講解 pandas的基本用法和應用案例,熟悉R的朋友們也可以將其與R的數(shù)據(jù)分析功能進行對比,定能有所收獲。本篇先對 pandas的數(shù)據(jù)結構進行介紹,跟R大不相同的是,Python并沒有太多不同的數(shù)據(jù)結構和對象, pandas中主要包括 Series和 DataFrame兩種數(shù)據(jù)結構。

Series

Series有點類似于 numpy中的一維數(shù)組對象,一般由一組數(shù)據(jù)和數(shù)據(jù)相關的標簽或者索引構成,由一組數(shù)構成最簡單的 Series如下:

from numpy import *

from pandas import *

創(chuàng)建 Series:

obj = Series([-1,3,-4,6])

print(obj)

0 -1

1 3

2 -4

3 6

dtype: int64

可以看到的是,由一組數(shù)創(chuàng)建的 Series對象索引在左邊,值在右邊。我們也可以通過索引和值標簽分別訪問相應的對象:

#Series對象值

obj.values

array([-1, 3, -4, 6], dtype=int64)

#Series對象索引

obj.index

RangeIndex(start=0, stop=4, step=1)

當然,我們可以在創(chuàng)建Series對象的時候就對索引進行標記或者命名:

#對Series索引進行命名或者標記

obj2 = Series([-1,3,-4,6],index = ['a','b','c','d'])

print(obj2)

a -1

b 3

c -4

d 6

dtype: int64

#查看索引

obj2.index

Index(['a', 'b', 'c', 'd'], dtype='object')

根據(jù) Series索引訪問對象值:

obj2['a']

-1

obj2[['a','b','c']]

a -1

b 3

c -4

dtype: int64

也可以對Series對象進行數(shù)組運算:

obj2[obj2 > 0]

b 3

d 6

dtype: int64

obj2*2

a -2

b 6

c -8

d 12

dtype: int64

np.exp(obj2)

a 0.367879

b 20.085537

c 0.018316

d 403.428793

dtype: float64

除了直接以數(shù)組形式創(chuàng)建 Series對象之外,通過字典來生成 Series也是較為普遍的做法:

nba = {'Kobe Bryant':30.3,'Allen Iverson':29.4,'Tracy McGrady':30.1,'Vince Carter':25.6}

obj3 = Series(nba)

print(obj3)

AllenIverson 29.4

KobeBryant 30.3

TracyMcGrady 30.1

VinceCarter 25.6

dtype: float64

創(chuàng)建完之后可以對 Series對象和索引進行命名:

obj3.name = 'nbastats'

obj3.index.name = 'player'

print(obj3)

player

AllenIverson 29.4

KobeBryant 30.3

TracyMcGrady 30.1

VinceCarter 25.6

Name: nbastats, dtype: float64

另外, Series索引可以隨時進行更改:

obj3.index = ['A.Iverson','K.Bryant','T.McGrady','V.Carter']

print(obj3)

A.Iverson 29.4

K.Bryant 30.3

T.McGrady 30.1

V.Carter 25.6

Name: nbastats, dtype: float64

除了上述創(chuàng)建 Series對象的方法以外,從 DataFrame中單獨拿出一行也可以用來創(chuàng)建 Series。關于 Series數(shù)據(jù)結構的基本內容就介紹到這里,下面看 DataFrame。

DataFrame

說到 DataFrame,可能大家更熟悉的是R語言中的 data.frame,Python中的 DataFrame跟它也較為類似。在Python中, DataFrame是一個表格型的數(shù)據(jù)結構,它含有一組有序的列,每列的數(shù)據(jù)類型可以不一樣,與R中的數(shù)據(jù)框相比,Python中的 DataFrame行列操作較為平衡。 構建DataFrame方法很多,最常用的是直接傳入一個由等長列表或NumPy數(shù)組組成的字典:

data = {'city':['LAL','HOU','PHI','TOR'],

'year':[1996,1997,1996,1997],

'score':[30.3,30.1,29.4,25.6]}

frame = DataFrame(data)

frame

city score year

0 LAL 30.3 1996

1 HOU 30.1 1997

2 PHI 29.4 1996

3 TOR 25.6 1997

可以看到,字典在轉化為數(shù)據(jù)框的過程中,鍵是作為列名而存在的。

#按指定列進行排列

DataFrame(data,columns=['year','city','score'])

year city score

0 1996 LAL 30.3

1 1997 HOU 30.1

2 1996 PHI 29.4

3 1997 TOR 25.6

根據(jù)字典傳入時,若是指定列找不到數(shù)據(jù)則會自動填補為缺失:

#若傳入的列找不到數(shù)據(jù)則會產生NA

frame2 = DataFrame(data,columns=['year','city','score','assist'],

index=[1,2,3,4])

print(frame2)

year city score assist

11996 LAL 30.3 NaN

21997 HOU 30.1 NaN

31996 PHI 29.4 NaN

41997 TOR 25.6 NaN

如前述,我們可以通過 data.frame來獲取一個 Series對象:

frame2['city']

1 LAL

2 HOU

3 PHI

4 TOR

Name: city, dtype: object

frame2.score

1 30.3

2 30.1

3 29.4

4 25.6

Name: score, dtype: float64

也可以通過 loc方法訪問 DataFrame的行:

frame2.loc[3]

year 1996

city PHI

score 29.4

assist NaN

Name: 3, dtype: object

對缺失的變量進行重新賦值:

frame2['assist']=5.6

print(frame2)

year city score assist

11996 LAL 30.3 5.6

21997 HOU 30.1 5.6

31996 PHI 29.4 5.6

41997 TOR 25.6 5.6

按索引傳入時,沒有被指定的記錄產生缺失:

val = Series([4.5,3.9],index=[1,4])

frame2['assist']=val

print(frame2)

year city score assist

11996 LAL 30.3 4.5

21997 HOU 30.1 NaN

31996 PHI 29.4 NaN

41997 TOR 25.6 3.9

對于嵌套字典轉化為 DataFrame,一般外層字典的鍵作為列,內層字典的鍵作為行索引:

nba = {'kobe':{2005:35.6,2006:32.1},'McGrady':{2005:26.7,2006:24.3}}

frame3 = DataFrame(nba)

print(frame3)

McGrady kobe

2005 26.735.6

2006 24.332.1

關于pandas的兩種基本數(shù)據(jù)結構Series和DataFrame,小編就暫且介紹到這里了,關于如何在實際的數(shù)據(jù)分析過程熟練使用這兩種數(shù)據(jù)結構的基本操作,小編在后續(xù)的推文中會進一步的講解。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)分析

    關注

    2

    文章

    1400

    瀏覽量

    33963
  • python
    +關注

    關注

    54

    文章

    4756

    瀏覽量

    84284

原文標題:利用pandas進行數(shù)據(jù)分析(一):Series和DataFrame數(shù)據(jù)結構

文章出處:【微信號:AI_shequ,微信公眾號:人工智能愛好者社區(qū)】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Python的列表和元組兩種數(shù)據(jù)結構區(qū)別差異分析

    前言 相信大家對于Python的列表和元組兩種數(shù)據(jù)結構并不陌生了,如果我問大家這兩種數(shù)據(jù)結構有什么區(qū)別呢?列表和元組都是數(shù)組,列表是動態(tài)的數(shù)組可以修改,元組是靜態(tài)的數(shù)組不可修改。除此之外,大家還能
    發(fā)表于 11-20 15:31 ?2089次閱讀
    Python的列表和元組<b class='flag-5'>兩種數(shù)據(jù)結構</b>區(qū)別差異分析

    盤點幾種常見的數(shù)據(jù)結構

    這里主要總結下在工作中常碰到的幾種數(shù)據(jù)結構:Array,ArrayList,List,LinkedList,Queue,Stack,Dictionary。
    的頭像 發(fā)表于 05-13 15:58 ?5972次閱讀
    盤點幾種常見的<b class='flag-5'>數(shù)據(jù)結構</b>

    數(shù)據(jù)結構

    1.數(shù)據(jù)結構的概念 所謂數(shù)據(jù)結構是指由某一數(shù)據(jù)對象及該對象中所有數(shù)據(jù)成員之間的關系組成的集合。成員之間的關系有很多種,最常見的是前后件關系。 2.
    發(fā)表于 03-04 14:13

    請問大神這種數(shù)據(jù)結構一般如何解析額?

    請問大神,這種數(shù)據(jù)結構一般如何解析額。。 不太懂。。
    發(fā)表于 06-10 09:27

    labview利用tcp協(xié)議同時傳輸兩種數(shù)據(jù)

    如何通過tcp傳輸兩種數(shù)據(jù)
    發(fā)表于 09-02 11:07

    數(shù)據(jù)結構教學軟件

    數(shù)據(jù)結構教學軟件:有C語言,pascal語言兩種
    發(fā)表于 10-24 12:15 ?51次下載
    <b class='flag-5'>數(shù)據(jù)結構</b>教學軟件

    數(shù)據(jù)結構是什么_數(shù)據(jù)結構有什么用

    數(shù)據(jù)結構是計算機存儲、組織數(shù)據(jù)的方式。數(shù)據(jù)結構是指相互之間存在一種或多種特定關系的數(shù)據(jù)元素的集合。通常情況下,精心選擇的數(shù)據(jù)結構可以帶來更高
    發(fā)表于 11-17 14:45 ?1.6w次閱讀
    <b class='flag-5'>數(shù)據(jù)結構</b>是什么_<b class='flag-5'>數(shù)據(jù)結構</b>有什么用

    java中幾種常用數(shù)據(jù)結構

    對于數(shù)組和鏈表這兩種數(shù)據(jù)結構,如果要查找它們存儲的某個特定元素卻不知道它的位置,就需要從頭開始訪問元素直到找到匹配的為止;如果數(shù)據(jù)結構中包含很多的元素,就會浪費時間。這時最好使用散列表來存儲要查找的數(shù)據(jù)
    的頭像 發(fā)表于 02-08 16:12 ?1.5w次閱讀
    java中幾種常用<b class='flag-5'>數(shù)據(jù)結構</b>

    為什么要學習數(shù)據(jù)結構?數(shù)據(jù)結構的應用詳細資料概述免費下載

    本文檔的主要內容詳細介紹的是為什么要學習數(shù)據(jù)結構數(shù)據(jù)結構的應用詳細資料概述免費下載包括了:數(shù)據(jù)結構在串口通信當中的應用,數(shù)據(jù)結構在按鍵監(jiān)測
    發(fā)表于 09-11 17:15 ?13次下載
    為什么要學習<b class='flag-5'>數(shù)據(jù)結構</b>?<b class='flag-5'>數(shù)據(jù)結構</b>的應用詳細資料概述免費下載

    什么是數(shù)據(jù)結構?為什么要學習數(shù)據(jù)結構?數(shù)據(jù)結構的應用實例分析

    本文檔的主要內容詳細介紹的是什么是數(shù)據(jù)結構?為什么要學習數(shù)據(jù)結構?數(shù)據(jù)結構的應用實例分析包括了:數(shù)據(jù)結構在串口通信當中的應用,
    發(fā)表于 09-26 15:45 ?14次下載
    什么是<b class='flag-5'>數(shù)據(jù)結構</b>?為什么要學習<b class='flag-5'>數(shù)據(jù)結構</b>?<b class='flag-5'>數(shù)據(jù)結構</b>的應用實例分析

    數(shù)據(jù)結構解決滑動窗口問題

    前文用 [單調棧解決三道算法問題]介紹了單調棧這種特殊數(shù)據(jù)結構,本文寫一個類似的數(shù)據(jù)結構「單調隊列」。 也許這種數(shù)據(jù)結構的名字你沒聽過,其實沒啥難的,就是一個「隊列」,只是使用了一點
    的頭像 發(fā)表于 04-19 10:50 ?599次閱讀
    <b class='flag-5'>數(shù)據(jù)結構</b>解決滑動窗口問題

    Linux內核中使用的數(shù)據(jù)結構

    Linux內核代碼中廣泛使用了數(shù)據(jù)結構和算法,其中最常用的個是鏈表和紅黑樹。 鏈表 Linux內核代碼大量使用了鏈表這種數(shù)據(jù)結構。鏈表是在解決數(shù)組不能動態(tài)擴展這個缺陷而產生的一種數(shù)據(jù)結構
    的頭像 發(fā)表于 11-09 14:24 ?412次閱讀
    Linux內核中使用的<b class='flag-5'>數(shù)據(jù)結構</b>

    redis的五種數(shù)據(jù)類型底層數(shù)據(jù)結構

    Redis是一種內存數(shù)據(jù)存儲系統(tǒng),支持多種數(shù)據(jù)結構。這些數(shù)據(jù)結構不僅可以滿足常見的存儲需求,還能夠通過其底層數(shù)據(jù)結構提供高效的操作和查詢。以下是Redis中常用的五
    的頭像 發(fā)表于 11-16 11:18 ?646次閱讀

    redis數(shù)據(jù)結構的底層實現(xiàn)

    Redis是一種內存鍵值數(shù)據(jù)庫,常用于緩存、消息隊列、實時數(shù)據(jù)分析等場景。它的高性能得益于其精心設計的數(shù)據(jù)結構和底層實現(xiàn)。本文將詳細介紹Redis常用的
    的頭像 發(fā)表于 12-05 10:14 ?554次閱讀

    矢量與柵格數(shù)據(jù)結構各有什么特征

    矢量數(shù)據(jù)結構和柵格數(shù)據(jù)結構是地理信息系統(tǒng)(GIS)中最常用的兩種數(shù)據(jù)結構。它們在存儲和表示地理要素上有著不同的方法和特征。在接下來的文章中,我們將詳細介紹
    的頭像 發(fā)表于 02-25 15:06 ?2007次閱讀