pandas學習基本概念:Series與DataFrame

目錄

Pandas簡介 

Pandas理解

Series類型

(一)創建:

(二)基本操作

DataFrame類型

(一)DataFrame基本概念

(二)DataFrame類型創建

(三)數據類型操作

(1)重新索引:.reindex()

(2)索引類型及其常用方法

(3) 刪除指定索引對象

(四)數據類型運算

(1)算數運算法則

(2)比較運算法則

 


Pandas簡介 

提供高性能易用數據類型和分析工具的第三方庫。

引用:import pandas as pd

基於NumPy實現,常與NumPy和Matplotlib一同使用。

Pandas理解

兩個數據類型:Series(一維)、DataFrame(二維及以上)

基於上述數據類型的各類操作:基本操作、運算操作、特徵類操作、關聯類操作

NumPy Pandas
基礎數據類型 擴展數據類型

關注數據的結構表達(數據之間構成的維度,通過什麼維度將一組數據存儲和表達)

維度:數據間的關係

關注數據的應用表達(在使用數據時,如何更有效地提前並運用數據,過度的維度關係不利於數據的實際運用)

數據與索引之間的關係

(無論是series還是dataframe都支持有效的索引)

 

 

 

 

 

 

Series類型

由一組數據和與之相關的數據索引組成

(一)創建:

  • Python列表:index與列表元素個數一致。
  • 標量值:index表達Series類型的尺寸。
  • Python字典:鍵值對中的鍵是索引,index從字典中進行選擇操作
  • ndarray:索引和數據都可以通過ndarra類型創建。
  • 其他函數:range()函數等
import pandas as pd
import numpy as np
#從標量創建,必須指定索引
a = pd.Series(25, index = ['a', 'b', 'c'])
print(a)
#從字典創建01
d1 = pd.Series({'a':9, 'b':8, 'c':7})
print(d1)
#從字典創建02:由index指定series結構,並從字典中選取相應值的過程,若無對應值,值NaN
d2 = pd.Series({'a': 9, 'b': 8, 'c': 7}, index=['c', 'a', 'b', 'd'])
print(d2)
#從ndarray創建,若不指定index,默認0始數字
n = pd.Series(np.arange(5), index=np.arange(9, 4, -1))
print(n)

(二)基本操作

Series類型包括index和values兩部分

  • .index()獲取所有索引,類型爲index
  • .value()獲取所有數據,類型爲numpy.array
  • 索引包括自動索引和自定義索引,兩套索引並存但不能混用,如一起使用,會被當作自定義索引。

Series類型的操作類型類似ndarray類型

  • 索引方法相同:series[index](結果是value)、series[:n](切片,結果依然是series)、series[比較關係,結果依然是series]
  • Numpy中運算和操作可用於Series類型
  • 可以通過自定義索引的列表進行切片
  • 可以通過自動索引進行切片,如果存在自定義索引,則一同被切片

Series類型的操作類型類似python字典類型

  • 通過自定義索引訪問
  • 使用保留字in:是否在索引的列表中(不判斷自動索引)
  • 使用get方法:b.get('index',200),從series中提取index對應的值,如不存在,返回第二個參數的值

Series類型對齊操作

Series類型的name屬性:series.name、series.index.name

Series類型的修改:Series對象可以隨時修改並立刻生效

DataFrame類型

(一)DataFrame基本概念

  • DataFrame類型由共同相同索引的一組列組成,是一個表格型的數據類型,每列值類型可以不同
  • DataFrame既有行索引,也有列索引。
  • DataFrame類型常表達二維類型,也可以表達多維數據。
  • 縱向索引:index;橫向列:column,column[0]爲索引列(零軸)

(二)DataFrame類型創建

  • 二維ndarray對象
  • 有一維ndarray、列表、字典、元組或Series構成的字典
  • Series類型
  • 其他的DataFrame類型
import pandas as pd
import numpy as np

#從二維ndarray對象創建, 自動生成行、列索引,都是零開始的整數
d = pd.DataFrame(np.arange(10).reshape(2, 5))
print(d)
#從一維ndarray對象字典創建,字典中的鍵默認爲自定義的列索引,且索引自動對齊
dt = {'one': pd.Series([1, 2, 3], index=['a', 'b', 'c']), 
      'two': pd.Series([9, 8, 7, 6], index=['a', 'b', 'c', 'd'])}
d2 = pd.DataFrame(dt)
print(d2)
    #選取列的時候若列不存在,會補爲空列
pd.DataFrame(dt, index=['b', 'c', 'd'], columns=['two', 'three'])

#從列表類型的字典創建
dl = {'one': [1, 2, 3, 4], 'two': [9, 8, 7, 6]}
d3 = pd.DataFrame(dl, index=['a', 'b', 'c', 'd'])
print(d3)

import pandas as pd
import numpy as np

d1 = {'城市': ['北京', '上海', '廣州', '深圳', '瀋陽'],
      '環比': [101.5, 101.2, 101.3, 102.0, 100.1],
      '同比': [101.5, 101.2, 101.3, 102.0, 100.1],
      '定基': [101.5, 101.2, 101.3, 102.0, 100.1]}
d3 = pd.DataFrame(d1, index=['c1', 'c2', 'c3', 'c4', 'c5'])
print(d3) #列順序不一定和字典中一致

print(d3.index) #行索引
print(d3.columns)#列索引
print(d3.values)#值
print(d3['同比'])#指定列
print(d3.loc['c2'])#指定行
print(d3['同比']['c2'])#定位

 

(三)數據類型操作

 

(1)重新索引:.reindex()

d3 = d3.reindex(index=['c5', 'c4', 'c3', 'c2', 'c1'])
d3 = d3.reindex(columns=['城市', '同比', '環比', '定基'])
print(d3)

#reindex中其他參數
#fill_value:重新索引中,用於填充缺失位置索引的值
#method:填充方法,ffill表示當前值向前填充、bfill向後填充
#limit:最大填充量
#copy:默認true,生成新的對象,False時,新舊相等不復制

newc = d3.columns.insert(4, "新增")
newd = d3.reindex(columns=newc, fill_value=200 )
print(newd)

 

(2)索引類型及其常用方法

index對象是不可修改的,可以通過索引修改數據

nc = d3.columns.delete(2)
ni = d3.index.insert(5, 'c0')
nd = d3.reindex(index=ni, columns=nc, method='ffill')
print(nd)

(3) 刪除指定索引對象

d3 = d3.drop('c5')  #drop默認操作零軸上的元素
d3 = d3.drop('同比', axis=1)
print(d3)

(四)數據類型運算

(1)算數運算法則

  • 算數運算根據行列索引,補齊後運算,運算默認產生浮點數
  • 補齊時缺項填充NaN(空值)
  • 二維和一維、一維和零維之間爲廣播運算(和每一個元素計算)
import numpy as np
import pandas as pd

a = pd.DataFrame(np.arange(12).reshape(3,4))
b = pd.DataFrame(np.arange(20).reshape(4,5))

print(a+b)#標籤相同的行進行運算,標籤不同的補齊後進行運算

#或者使用方法形式運算,優點在於可以設置一些參數
b.add(a, fill_value = 100)
print(b)
a.mul(b, fill_value = 0)
print(a)

#不同維度的運算,廣播運算
c = pd.Series(np.arange(4))
print(c)
print(c-10)#每個元素與零維操作即可
print(b-c)#默認發生在1軸

#如果希望發生在零軸上,即b中每一列都減去c的每一列的對應元素,則需要指定零軸參與運算
b.sub(c, axis=0)
print(b)

(2)比較運算法則

比較運算法則只能比較相同索引的元素,不進行補齊

二維和一維,一維和零維間爲廣播運算

採用>、<、>=、<=、==、!=等符號進行的二元運算產生布爾對象

import numpy as np
import pandas as pd

#在同一維度運算,要求ab尺寸一致,若不同則會報錯
a = pd.DataFrame(np.arange(12).reshape(3, 4))
b = pd.DataFrame(np.arange(12, 0, -1).reshape(3, 4))
print(a)
print(b)
print(a>b)

#不同維度,廣播運算,默認在1軸.a的每一行都與c比較
c = pd.Series(np.arange(4))
print(c)
print(a>c)
print(c>5)

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章