1. 程式人生 > >資料結構之--series,DataFrame.use python and pandas for data mining

資料結構之--series,DataFrame.use python and pandas for data mining

1.好的資料結構是資料分析的基礎,一個高效的資料分析方法離不開資料的構造,series and DataFrame是兩種高效簡單的資料型別。

2.Series是一個一維的類似的陣列物件,包含一個數組的資料(任何NumPy的資料型別)和一個與陣列關聯的資料標籤,被成為索引(index),索引顯示在左邊,值顯示在右邊,其中索引在不指定的情況下從0到N-1之間自動產生,N是指資料的長度。

l1 = Series([1,3,4,2])
print l1
print type(l1)

OUT

0    1
1    3
2    4
3    2
dtype: int64
<class 'pandas.core.series.Series'
>

IN

l1 = Series([1,3,4,2])
print l1.values
print l1.index

OUT

[1 3 4 2]
Int64Index([0, 1, 2, 3], dtype='int64')

自定義索引

IN

l1 = Series([1,3,4,2],index=['d','g','k','b'])
print l1.values
print l1.index

OUT

[1 3 4 2]
Index([u'd', u'g', u'k', u'b'], dtype='object')

一個值或是多個值的選擇

IN:

l1 = Series([1,3,4,2],index=['d','g','k','b'])
# print l1.values
# print l1.index
print l1['d']
print l1[['g','k','b']]

OUT

1
g    3
k    4
b    2
dtype: int64

2.1 說了上面那麼多,那麼相比於numpy,這種資料究竟有什麼不一樣的優勢呢?——它能在資料計算後保持資料的關聯性。

IN

l1 = Series([1,3,4,2],index=['d','g','k','b'])
print l1[l1>2
] print "*****************" print l1*2 print "*****************" print np.exp(l1)

OUT

g    3
k    4
dtype: int64
*****************
d    2
g    6
k    8
b    4
dtype: int64
*****************
d     2.718282
g    20.085537
k    54.598150
b     7.389056
dtype: float64

從上面看起來,Series是種有序定長的字典

那麼python中的字典能不能直接轉化為Series呢?of course!

l2 = {'w':1,'ww':2,'wwww':4,'www':3,'wwwwww':6}
print l2
l3 = Series(l2)
print l3

out

{'ww': 2, 'wwww': 4, 'www': 3, 'wwwwww': 6, 'w': 1}
w         1
ww        2
www       3
wwww      4
wwwwww    6
dtype: int64

in

l2 = {'w':1,'ww':2,'wwww':4,'www':3,'wwwwww':6}
new_index=['w','ww','wwwww','wwww','wwww']
l3 = Series(l2,index = new_index)
print l3

out

w         1
ww        2
wwwww   NaN
wwww      4
wwww      4
dtype: float64

在這種資料結構中缺失的資料用的NAN表示,在pandas中用函式 isnull 和 notnull 來檢測資料丟失。

l2 = {'w':1,'ww':2,'wwww':4,'www':3,'wwwwww':6}
new_index=['w','ww','wwwww','wwww','wwww']
l3 = Series(l2,index = new_index)
print l3
print "--------------------"
print pd.isnull(l3)
print pd.notnull(l3)

OUT

w         1
ww        2
wwwww   NaN
wwww      4
wwww      4
dtype: float64
--------------------
w        False
ww       False
wwwww     True
wwww     False
wwww     False
dtype: bool
w         True
ww        True
wwwww    False
wwww      True
wwww      True
dtype: bool

這種資料結構可以自動對齊

l1 = Series([1,3,4,2],index=['w','g','k','b'])
l2 = {'w':1,'ww':2,'wwww':4,'www':3,'wwwwww':6}
new_index=['w','ww','wwwww','wwww','wwww']
l3 = Series(l2,index = new_index)
print l1,l3
print l1+l3

out

w    1
g    3
k    4
b    2
dtype: int64 w         1
ww        2
wwwww   NaN
wwww      4
wwww      4
dtype: float64
b       NaN
g       NaN
k       NaN
w         2
ww      NaN
wwww    NaN
wwww    NaN
wwwww   NaN
dtype: float64

series中值和索引的name屬性

l1 = Series([1,3,4,2],index=['w','g','k','b'])
# l2 = {'w':1,'ww':2,'wwww':4,'www':3,'wwwwww':6}
# new_index=['w','ww','wwwww','wwww','wwww']
# l3 = Series(l2,index = new_index)
l1.name = 'nameOne'
l1.index.name = '1'
print l1

OUT

1
w    1
g    3
k    4
b    2
Name: nameOne, dtype: int64

到此關於series的基本用法闡述完畢,如有什麼不清楚的可以在下面給我留言,歡迎大家交流。

3. DataFrame資料結構

DataFrame可以看成是一個表格,這個表格是一個經過排序的列表集,這個列表集有中可以有不同的資料型別,行和列的操作基本相等的,關於這種資料結構的理解,請看下面相關的示例

DataFrame的構建

l1 ={"one" :['a','aa','aaaa','aaa','aaaaaa'],
"two" :['b','bb','bbbb','bbb','bbbbbb'],
"three" :['w','ww','wwww','www','wwwwww']}
print l1
print "---------------------------"
l2 = DataFrame(l1)
print l2

out

{'three': ['w', 'ww', 'wwww', 'www', 'wwwwww'], 'two': ['b', 'bb', 'bbbb', 'bbb', 'bbbbbb'], 'one': ['a', 'aa', 'aaaa', 'aaa', 'aaaaaa']}
---------------------------
      one   three     two
0       a       w       b
1      aa      ww      bb
2    aaaa    wwww    bbbb
3     aaa     www     bbb
4  aaaaaa  wwwwww  bbbbbb

上面對列分配了索引,並且排序

如何按自己的順序來排列資料

l1 ={"one" :['a','aa','aaaa','aaa','aaaaaa'],
"two" :['b','bb','bbbb','bbb','bbbbbb'],
"three" :['w','ww','wwww','www','wwwwww']}


l2 = DataFrame(l1)
print l2
print "---------------------------"
l3 = DataFrame(l1, columns=['three', 'one', 'two'])
print l3

out

      one   three     two
0       a       w       b
1      aa      ww      bb
2    aaaa    wwww    bbbb
3     aaa     www     bbb
4  aaaaaa  wwwwww  bbbbbb
---------------------------
    three     one     two
0       w       a       b
1      ww      aa      bb
2    wwww    aaaa    bbbb
3     www     aaa     bbb
4  wwwwww  aaaaaa  bbbbbb

檢索行、列

l1 ={"one" :['a','aa','aaaa','aaa','aaaaaa'],
"two" :['b','bb','bbbb','bbb','bbbbbb'],
"three" :['w','ww','wwww','www','wwwwww']}
l2 = DataFrame(l1)
print l2.ix[2]
print "---------------------------"
print l2["two"]

out

one      aaaa
three    wwww
two      bbbb
Name: 2, dtype: object
---------------------------
0         b
1        bb
2      bbbb
3       bbb
4    bbbbbb
Name: two, dtype: object

行列資料都能通過賦值改變,可以通過series精確賦值。給不存在的列賦值會建立新的值。任何在series上的修改都會影響DataFrame.

如果一個DataFrame的 index 和 columns 有它們的 name ,也會被顯示出來,

l1 ={"one" :['a','aa','aaaa','aaa','aaaaaa'],
"two" :['b','bb','bbbb','bbb','bbbbbb'],
"three" :['w','ww','wwww','www','wwwwww']}
l2 = DataFrame(l1)
l2.index.name = 'year' 
l2.columns.name = 'state'
print l2

OUT

state     one   three     two
year                         
0           a       w       b
1          aa      ww      bb
2        aaaa    wwww    bbbb
3         aaa     www     bbb
4      aaaaaa  wwwwww  bbbbbb

in

l1 ={"one" :['a','aa','aaaa','aaa','aaaaaa'],
"two" :['b','bb','bbbb','bbb','bbbbbb'],
"three" :['w','ww','wwww','www','wwwwww']}
l2 = DataFrame(l1)
l2.index.name = 'year' 
l2.columns.name = 'state'

print l2.values

out

[['a' 'w' 'b']
 ['aa' 'ww' 'bb']
 ['aaaa' 'wwww' 'bbbb']
 ['aaa' 'www' 'bbb']
 ['aaaaaa' 'wwwwww' 'bbbbbb']]

索引方法和屬性

  • append 連結額外的索引物件,產生一個新的索引
  • diff 計算索引的差集
  • intersection 計算交集
  • union 計算並集
  • isin 計算出一個布林陣列表示每一個值是否包含在所傳遞的集合裡
  • delete 計算刪除位置i的元素的索引
  • drop 計算刪除所傳遞的值後的索引
  • insert 計算在位置i插入元素後的索引
  • is_monotonic 返回True,如果每一個元素都比它前面的元素大或相等
  • is_unique 返回True,如果索引沒有重複的值
  • unique 計算索引的唯一值陣列

4. series和DataFrame關鍵特性的使用

在Series上呼叫 reindex 重排資料,使得它符合新的索引,如果那個索引的值不存在就引入缺失資料值

ll1 = Series([4.5, 7.2, -5.3, 3.6], index=['d', 'b', 'a', 'c'])
ll2 = ll1.reindex(['a', 'b', 'c', 'd', 'e'])
print ll2

out

a   -5.3
b    7.2
c    3.6
d    4.5
e    NaN
dtype: float64

reindex 的 method(內插)選項,自己去研究,刪除條目用.drop()

過濾

  • obj.ix[val] 從DataFrame的行集選擇單行
  • obj.ix[:, val] 從列集選擇單列
  • obj.ix[val1, val2] 選擇行和列
  • reindex 方法 轉換一個或多個軸到新的索引
  • xs 方法 通過標籤選擇單行或單列到一個Series
  • icol, irow 方法 通過整數位置,分別的選擇單行或單列到一個Series
  • get_value, set_value 方法 通過行和列標選擇一個單值

reference:

相關推薦

資料結構--series,DataFrame.use python and pandas for data mining

1.好的資料結構是資料分析的基礎,一個高效的資料分析方法離不開資料的構造,series and DataFrame是兩種高效簡單的資料型別。 2.Series是一個一維的類似的陣列物件,包含一個數組的資料(任何NumPy的資料型別)和一個與陣列關聯的資料標籤,

資料結構單向連結串列----python實現

單向連結串列單向連結串列也叫單鏈表,是連結串列中最簡單的一種形式,它的每個節點包含兩個域,一個資訊域(元素域)和一個連結域。這個連結指向連結串列中的下一個節點,而最後一個節點的連結域則指向一個空值。表元

Python資料分析pandas基本資料結構SeriesDataFrame

1引言 本文總結Pandas中兩種常用的資料型別: (1)Series是一種一維的帶標籤陣列物件。 (2)DataFrame,二維,Series容器 2 Series陣列 2.1 Series陣列構成 Series陣列物件由兩部分構成: 值(value):一維陣列的各元素值,是一個ndarr

pandas資料結構Dataframe

Dataframe DataFrame是一個【表格型】的資料結構,可以看做是【由Series組成的字典】(多個series共用同一個索引)。DataFrame由按一定順序排列的多列資料組成。設計初衷是將Series的使用場景從一維拓展到多維。DataFrame既有行索引,也有列索引。 行索引:ind

Python資料結構: 棧與佇列

棧(stacks) 是一種只能通過訪問其一端來實現資料儲存與檢索的線性資料結構,具有後進先出(last in first out,LIFO)的特徵 stack = [] stack.append("A") #A入棧 stack.append("B") #B入棧 st

python資料結構KMP演算法的實現

我相信網上已經有很多關於KMP演算法的講解,大致都是關於部分匹配表的實現思路和作用,還有就是目標串的下標不變,僅改變模式串的下標來進行匹配,確實用KMP演算法,當目標串很大模式串很小時,其效率很高的,但都是相對而言。至於對於部分匹配表的作用以及實現思路,建議看一下這篇文章寫的是比較易懂的

python資料結構二叉樹

這裡用python 實現了二叉樹 # Definition for a binary tree node. class TreeNode: def __init__(self, x): self.val = x self.left =

Python 6-1.內建資料結構list(基礎篇)

-常見內建資料結構- list 列表 set 集合 dict 字典 tuple 元祖-本章大綱- list(列表): 一組由順序的資料的組合 建立列表 有值列表 無值列表(空列表

python資料結構串——概述和基本演算法

概述: 字串(string)簡稱串,也是一種線性結構。在python中和array差不多,因為py的陣列也可以包括各種字元(在C/Java一類的語法中,陣列必須是同一種資料型別的元素)。線性結構,有限序列,是主要特點。串其中可以包含各種元素,也是計算機主要處理的一類物件。因

Cris 複習Python日記(四):Python 資料結構序列和列表

1. 簡單認識序列和列表 # 序列 # 序列是Python 中最基本的資料結構,用於儲存一組有序的資料,所有資料都在序列中擁有一個唯一索引,並且按照元素新增的順序來指定序列 # 序列的分類 # 1.

官方練習 Pandas 資料結構簡介 Series VS DataFrame

傳遞的索引是軸標籤列表。因此,根據資料的不同,這可分為幾種情況: In [42]: import pandas as pd import numpy as np import matplotlib.pyplot as plt 來自ndarray 如果data是nda

python資料結構棧和佇列

1.功能實現 之前文章有,可以點開看看 棧 佇列 2.應用(1)括號匹配及字尾表示式 class Solution(object): def isValid(self, s): """ :type s: str :rtype

python資料結構連結串列

1.功能實現 連結串列(Linked list)是一種常見的基礎資料結構,是一種線性表,但是並不會按線性的順序儲存資料,而是在每一個節點裡存到下一個節點的指標(Pointer)。由於不必須按順序儲存,連結串列在插入的時候可以達到O(1)的複雜度,比另一種線性表順序錶快得多,但是查詢一個節點或者訪

python 資料結構列表操作

lt = [1, 2, 3, 4, 5] #列表取值與切片 #切片規則與字串相同 print(lt[0])#1 print(lt[-1])#5 print(lt[1:3])#[2, 3] print(len(lt))#列表長度5 # 修改元素 lt[0] = 100 print(lt)#[100,

python 基礎資料結構字串操作

#切割部分s = 'I love you more than i can say' # 切割字串 # sep:指定按照什麼進行切割,預設按照空格切割 # maxsplit:指定最大切割次數,預設不限制次數 # ret = s.split(sep='abc', maxsplit=1) # 從右邊進行切割

資料結構python實現雙端佇列

雙端佇列deque 雙端佇列(deque,全名double-ended queue),是一種具有佇列和棧的性質的資料結構。 雙端佇列中的元素可以從兩端彈出,其限定插入和刪除操作在表的兩端進行。雙端佇列可以在佇列任意一端入隊和出隊。 程式碼實現 """雙端

資料結構python實現冒泡演算法(bubblesort)

1.氣泡排序思想 比較相鄰的元素。如果第一個比第二個大(升序),就交換他們兩個。 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。 針對所有的元素重複以上的步驟,除了最後一個。 持續每次對越來越少的元素重複上面的

python資料結構字典方法

字典是一種通過名字或者關鍵字引用的得資料結構,其鍵可以是數字、字串、元組,這種結構型別也稱之為對映。字典型別是Python中唯一內建的對映型別,基本的操作包括如下:  (1)len():返回字典中鍵—值對的數量;  (2)d[k]:返回關鍵字對於的值;  (3)d[k]

python資料結構字串方法

1.capitalize():將字串中首字母轉換成大寫,其餘字元轉換成小寫 Str="this is string example from runoob ...wow!!!" print("Str.capitalize():",Str.capitalize())#該方法返回一個首字母大寫的字串

python資料結構字串格式化

字串格式化: 1.簡單運用 字串型別格式化採用format()方法,基本使用格式是:      <模板字串>.format(<逗號分隔的引數>) 呼叫format()方法後會返回一個新的字串,引數從0 開始編號