Pandas Series

weixin_33728268發表於2019-02-07

前言:DataFrame 這篇文章寫完後,對 Pandas 的總結還不夠。私底下認為 DataFrame 的 Series 就是 DataFrame 的某一列。所以很多東西都是通用的。

拿出 DataFrame 某一列操作時,可以用 type 看這個物件的型別,幫助理解

import numpy as np
import pandas as pd
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
c = ['a', 'b', 'c']
r = ['A', 'B', 'C']
df = pd.DataFrame(data=data,  columns=c, index=r)

c_1 = df.a
print(type(c_1)) # <class 'pandas.core.series.Series'>

所以學習 Series 的方法和屬性是很有必要的。

建立

 # 不指定索引, 也會有預設的位置索引, 從0開始
pd.Series(range(5))
# 加上自定義索引, 會和預設索引共存
pd.Series([9, 8, 7, 6], ['a', 'b', 'c', 'd']) 
# 字典形式建立
pd.Series({'a':1, 'b':2, 'c':3}) 
# 根據索引選擇字典中的值, 不存在返回NaN
pd.Series({'a':8, 'b':9, 'c':7}, ['c', 'b', 'd', 'a']) 
# 和numpy完美相容
pd.Series(np.arange(3), ['one', 'two', 'three'])

索引

位置索引

s[1] # 選取第2行元素
s[1:9] # 選取第2到第9行元素
s[1::2] # 選取第2到最後, 每隔2行的元素

自定義索引

s['one'] # 選取one行的元素
s['one':'three'] # 選取one到three行元素
s[:'three':2] # 選取開頭到three行, 每隔2行的元素

布林索引

s[s<10] # 選取所有value小於10的s
s[s.between(10, 20)] # 選取所有value大於等於10, 小於20的s

Series 的重要屬性和方法

很多 DataFrame 重要屬性和方法與之相同

'''重要屬性'''
s.values # 所有元素的value, ndarray型別
s.dtype # 元素型別
s.size # 元素的數量
s.itemsize # 每個元素的大小, 位元組為單位
s.nbytes # 所有資料佔用的大小, 位元組為單位, 等於s.size*s.itemsize

'''常用方法'''
s.unique() # 返回一個去重後的ndarray陣列
s.value_counts(dropna=False)  # 顯示唯一值和計數, dropna=False代表不包含NaN
s.drop(0) # 刪除第一行, 非原地
s.append(s) # 在行尾新增資料, s是Series物件
s.apply(func) # 將func作用在s所有值上
s.sort_values() # 根據s的value排序, 可傳入ascending引數決定升序降序
s.sort_index() # 根據s的index排序, 可傳入ascending引數決定升序降序
s.astype() # 改變型別, 非原地

轉換成 Numpy

s.values
np.array(s)

關注我的公眾號,我們一起進步。還有福利喲。

15548795-f0cb94a48ef3e8a9.jpg
akoder

相關文章