資料結構之--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基本資料結構:Series、DataFrame
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 開始編號