pandas入門:Series、DataFrame、Index基本操作都有了!

2021-03-02 大數據DT

作者:李明江 張良均 周東平 張尚佳

來源:大數據DT(ID:hzdashuju)

pandas提供了眾多類,可滿足不同的使用需求,其中常用的類如下所示。Series:基本數據結構,一維標籤數組,能夠保存任何數據類型DataFrame:基本數據結構,一般為二維數組,是一組有序的列Index:索引對象,負責管理軸標籤和其他元數據(比如軸名稱)groupby:分組對象,通過傳入需要分組的參數實現對數據分組Timestamp:時間戳對象,表示時間軸上的一個時刻Timedelta:時間差對象,用來計算兩個時間點的差值在這6個類中,Series、DataFrame和Index是使用頻率最高的類。Series由一組數據以及一組與之對應的數據標籤(即索引)組成。Series對象可以視作一個NumPy的ndarray,因此許多NumPy庫函數可以作用於Series。創建Series對象的函數是Series,它的主要參數是data和index,其基本語法格式如下。

class pandas.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)

data:接收array或dict。表示接收的數據。默認為Noneindex:接收array或list。表示索引,它必須與數據長度相同。默認為Nonename:接收string或list。表示Series對象的名稱。默認為NoneSeries本質上是一個ndarray,通過ndarray創建Series對象,如代碼清單6-1所示。代碼清單6-1 通過ndarray創建Series

import pandas as pd
import numpy as np
print('通過ndarray創建的Series為:\n',
      pd.Series(np.arange(5), index = ['a', 'b', 'c', 'd', 'e'], name = 'ndarray'))

輸出:

通過ndarray創建的Series為:
a    0
b    1
c    2
d    3
e    4
Name: ndarray, dtype: int32

若數據存放於一個dict中,則可以通過dict創建Series,此時dict的鍵名(key)作為Series的索引,其值會作為Series的值,因此無須傳入index參數。通過dict創建Series對象,如代碼清單6-2所示。

dit = {'a': 0, 'b': 1, 'c': 2, 'd': 3, 'e': 4}
print('通過dict創建的Series為:\n', pd.Series(dit))

通過dict創建的Series為:
a    0
b    1
c    2
d    3
e    4
dtype: int64

通過list創建Series,類似於通過ndarray創建Series,如代碼清單6-3所示。

list1 = [0, 1, 2, 3, 4]
print('通過list創建的Series為:\n', pd.Series(list1, index = ['a', 'b', 'c', 'd', 'e'], name = 'list'))

通過list創建的Series為:
a    0
b    1
c    2
d    3
e    4
Name: list, dtype: int64

values:以ndarray的格式返回Series對象的所有元素

series = pd.Series(list1, index = ['a', 'b', 'c', 'd', 'e'], name = 'list')
print('數組形式返回Series為:', series.values)

#輸出:數組形式返回Series為: [0 1 2 3 4]

print('Series的Index為:', series.index)

#輸出:Series的Index為:Index(['a', 'b', 'c', 'd', 'e'], dtype='object')

print('Series的形狀為:', series.shape)

#輸出:Series的形狀為: (5,)

print('Series的維度為:', series.ndim)

#輸出:Series的維度為:1

索引與切片是Series最常用操作之一。通過索引位置訪問Series的數據與ndarray相同,如代碼清單6-5所示。代碼清單6-5 通過索引位置訪問Series數據子集

print('Series位於第1位置的數據為:', series[0])

相比ndarray,通過索引名稱(標籤)也可以訪問Series數據,如代碼清單6-6所示。

print('Series中Index為a的數據為:', series['a'])

此外,也可通過bool類型的Series、list或array訪問Series數據,如代碼清單6-7所示。代碼清單6-7 通過bool數組訪問Series數據

bool = (series < 4)
print('bool類型的Series為:\n', bool)

輸出:

bool類型的Series為:
a     True
b     True
c     True
d     True
e    False
Name: list, dtype: bool

print('通過bool數據訪問Series結果為:\n', series[bool])

通過bool數據訪問Series結果為:
a    0
b    1
c    2
d    3
Name: list, dtype: int64

更新Series的方法十分簡單,採用賦值的方式對指定索引標籤(或位置)對應的數據進行修改即可,如代碼清單6-8所示。

# 更新元素
series['a'] = 3
print('更新後的Series為:\n', series)

更新後的Series為:
a    3
b    1
c    2
d    3
e    4
Name: list, dtype: int64

類似list,通過append方法能夠在原Series上插入(追加)新的Series。若只在原Series上插入單個值,則採用賦值方式即可,如代碼清單6-9所示。

series1 = pd.Series([4, 5], index = ['f', 'g'])
# 追加Series
print('在series插入series1後為:\n', series.append(series1))

在series插入series1後為:
a    3
b    1
c    2
d    3
e    4
f    4
g    5
dtype: int64

# 新增單個數據
series1['h'] = 7
print('在series1插入單個數據後為:\n', series1)

在series1插入單個數據後為:
f    4
g    5
h    7
dtype: int64

一般使用drop方法刪除Series元素,它接收被刪除元素對應的索引,inplace=True表示對原Series起作用,如代碼清單6-10所示。

# 刪除數據
series.drop('e', inplace = True)
print('刪除索引e對應數據後的series為:\n', series)

輸出:

刪除索引e對應數據後的series為:
a    3
b    1
c    2
d    3
Name: list, dtype: int64

DataFrame是pandas基本數據結構,類似資料庫中的表。DataFrame既有行索引,也有列索引,它可以看作Series組成的dict,每個Series看作DataFrame的一個列。DataFrame函數用於創建DataFrame對象,其基本語法格式如下。

class pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)

DataFrame函數常用的參數及其說明如下所示。data:接收ndarray,dict,list或DataFrame。表示輸入數據。默認為Noneindex:接收Index,ndarray。表示索引。默認為Nonecolumns:接收Index,ndarray。表示列標籤(列名)。默認為None創建DataFrame的方法有很多,常見的一種是傳入一個由等長list或ndarray組成的dict。若沒有傳入columns參數,則傳入的dict的鍵會被當作列名,如代碼清單6-11所示。代碼清單6-11 通過dict創建DataFrame

dict1 = {'col1': [0, 1, 2, 3, 4], 'col2': [5, 6, 7, 8, 9]}
print('通過dict創建的DataFrame為:\n', pd.DataFrame(dict1, index = ['a', 'b', 'c', 'd', 'e']))

通過dict創建的DataFrame為:
    col1  col2
a     0     5
b     1     6
c     2     7
d     3     8
e     4     9

通過list或ndarray也可創建DataFrame,如代碼清單6-12所示。代碼清單6-12 通過list創建DataFrame

list2 = [[0, 5], [1, 6], [2, 7], [3, 8], [4, 9]]
print('通過list創建的DataFrame為:\n',
      pd.DataFrame(list2, index = ['a', 'b', 'c', 'd', 'e'], columns = ['col1', 'col2']))

通過list創建的DataFrame為:
    col1  col2
a     0     5
b     1     6
c     2     7
d     3     8
e     4     9

由於DataFrame是二維數據結構,包含列索引(列名),因此較Series有更多的屬性。DataFrame常用的屬性及其說明如下所示。values:以ndarray的格式返回DataFrame對象的所有元素index:返回DataFrame對象的Indexcolumns:返回DataFrame對象的列標籤dtypes:返回DataFrame對象的數據類型訪問創建的DataFrame的常用屬性,如代碼清單6-13所示。

df = pd.DataFrame({'col1': [0, 1, 2, 3, 4], 'col2': [5, 6, 7, 8, 9]},
                   index = ['a', 'b', 'c', 'd', 'e'])
print('DataFrame的Index為:', df.index)

#輸出:DataFrame的Index為:Index(['a', 'b', 'c', 'd', 'e'], dtype='object')

print('DataFrame的列標籤為:', df.columns)

#輸出:DataFrame的列標籤為:Index(['col1', 'col2'], dtype='object')

print('DataFrame的軸標籤為:', df.axes)

#輸出:DataFrame的軸標籤為: [Index(['a', 'b', 'c', 'd', 'e'], dtype='object'), Index(['col1', 'col2'], dtype='object')]

print('DataFrame的維度為:', df.ndim)

#輸出:DataFrame的維度為:2

print('DataFrame的形狀為:', df.shape)

#輸出:DataFrame的形狀為: (5, 2)

head和tail方法用於訪問DataFrame前n行和後n行數據,默認返回5行數據,如代碼清單6-14所示。代碼清單6-14 訪問DataFrame前後n行數據

print('默認返回前5行數據為:\n', df.head())    

輸出:

默認返回前5行數據為:
    col1  col2
a     0     5
b     1     6
c     2     7
d     3     8
e     4     9    

print('返回後3行數據為:\n', df.tail(3))

輸出:

返回後3行數據為:
    col1  col2
c     2     7
d     3     8
e     4     9

類似Series,更新DataFrame列也採用賦值的方法,對指定列賦值即可,如代碼清單6-15所示。

# 更新列
df['col1'] = [10, 11, 12, 13, 14]
print('更新列後的DataFrame為:\n', df)

更新列後的DataFrame為:
    col1  col2
a    10     5
b    11     6
c    12     7
d    13     8
e    14     9

插入列也可以採用賦值方法,如代碼清單6-16所示。

# 插入列
df['col3'] = [15, 16, 17, 18, 19]
print('插入列後的DataFrame為:\n', df)

插入列後的DataFrame為:
    col1  col2  col3
a    10     5    15
b    11     6    16
c    12     7    17
d    13     8    18
e    14     9    19

刪除列的方法有多種,如del、pop、drop等。常用的是drop方法,它可以刪除行或者列,基本語法格式如下。

DataFrame.drop(labels, axis=0, level=None, inplace=False, errors='raise')

labels:接收string或array。表示刪除的行或列的標籤。無默認值axis:接收0或1。表示執行操作的軸向,其中0表示刪除行,1表示刪除列。默認為0levels:接收int或者索引名。表示索引級別。默認為Noneinplace:接收bool。表示操作是否對原數據生效。默認為False使用drop方法刪除數據,如代碼清單6-17所示。

# 刪除列
df.drop(['col3'], axis = 1, inplace = True)
print('刪除col3列後的DataFrame為:\n', df)

刪除col3列後的DataFrame為:
    col1  col2
a    10     5
b    11     6
c    12     7
d    13     8
e    14     9

# 刪除行
df.drop('a', axis = 0, inplace = True)
print('刪除a行後的DataFrame為:\n', df)

刪除a行後的DataFrame為:
    col1  col2
b    11     6
c    12     7
d    13     8
e    14     9

Index對象為其餘pandas對象存儲軸標籤、管理軸標籤和其他元數據(如軸名稱)。創建Series或DataFrame等對象時,索引都會被轉換為Index對象。主要Index對象及其說明如下所示。DatetimeIndex:Timestamp索引對象Index對象可以通過pandas.Index()函數創建,也可以通過創建數據對象Series、DataFrame時接收index(或column)參數創建,前者屬於顯式創建,後者屬於隱式創建。隱式創建中,通過訪問index(或針對DataFrame的column)屬性即得到Index。創建的Index對象不可修改,保證了Index對象在各個數據結構之間的安全共享。Series的索引是一個Index對象。訪問Series索引,如代碼清單6-18所示。

print('series的Index為 :\n', series.index)

series的Index為 :
 Index(['a', 'b', 'c', 'd'], dtype='object')

is_monotonic:當各元素均大於前一個元素時,返回Trueis_unique:當Index沒有重複值時,返回True

print('series中Index各元素是否大於前一個:', series.index.is_monotonic)

#輸出:series中Index各元素是否大於前一個:True

print('series中Index各元素是否唯一:', series.index.is_unique)

#輸出:series中Index各元素是否唯一:True

append:連接另一個Index對象,產生一個新的Indexdifference:計算兩個Index對象的差集,得到一個新的Indexintersection:計算兩個Index對象的交集isin:計算一個Index是否在另一個Index,返回bool數組delete:刪除指定Index的元素,並得到新的Indexinsert:將元素插入到指定Index處,並得到新的Index應用Index對象的常用方法如代碼清單6-20所示。

index1 = series.index
index2 = series1.index
print('index1連接index2後結果為:\n', index1.append(index2))

#輸出:index1連接index2後結果為:
# Index(['a', 'b', 'c', 'd', 'f', 'g', 'h'], dtype='object')

相關焦點

  • Python-Pandas安裝--Series結構和DataFrame結構
    使用pandas庫相比NumPy庫有什麼好處,pandas庫比NumPy庫封裝了哪些特性 1. pandas會自動講數據按照自定義的方式進行對齊顯示,避免數據沒有對齊造成處理數據的時候出現失誤 2. pandas可以很靈活的處理缺失的數據,如果某個數據缺失,可以基於大部分數據的平均值進行填充,還可以填充想要的數值
  • Pandas系列 - DataFrame操作
    構造函數:pandas.DataFrame(data, index, columns, dtype, copy)編號參數描述1data數據採取各種形式,如:ndarray,series,map,lists,dict,constant和另一個DataFrame。
  • 【串講總結】array, list, tensor,Dataframe,Series之間互相轉換總結
    這些主要包括:Dataframe、Series(pandas), array(numpy), list, tensor(torch)二、定義2.1 Dataframe和Series這裡簡單介紹一下這兩個結構。
  • Python數據分析 | 第五章 Pandas入門之Series和DataFrame
    如果你使用過資料庫,你可以認為是類似join的操作。Series對象本身及其索引都有一個name屬性,該屬性跟pandas其他的關鍵功能關係非常密切:In [38]: obj4.name = 'population'In [39]: obj4.index.name = 'state'In [40]:
  • 什麼是Pandas的DataFrame?
    DataFrame既有行索引也有列索引,它可以被看做由series組成的字典(共用同一個索引)2. DateFrame特點DataFrame中面向行和面向列的操作基本是平衡的。DataFrame中的數據是以一個或多個兩維塊存放的(而不是列表、字典或別的一維數據結構)。
  • Pandas數據結構:DataFrame
    , 18],"city": ["BeiJing", "TianJin", "ShenZhen"]}print(data)print("")frame = pd.DataFrame(data) # 創建DataFrame
  • pandas:Series , Data Frame , Panel
    ,values)兩部分:import numpy as nparrySer=pd.Series(np.arange(10,15),index=['a','b','c','d','e'])print(arrySer.index)print(arrySer.values)[output]Index
  • 精心整理 | 非常全面的Pandas入門教程
    如何安裝pandas2. 如何導入pandas庫和查詢相應的版本信息3. pandas數據類型4. series教程5. dataframe教程6.__version__) # 列印pandas版本信息#> 0.23.4pandas包含兩種數據類型:series和dataframe。series是一種一維數據結構,每一個元素都帶有一個索引,與一維數組的含義相似,其中索引可以為數字或字符串。series結構名稱:
  • Pandas常用的兩種數據類型之「DataFrame」
    列操作# 語法:d[索引]# df=pd.DataFrame({"A":[1,2,3],"B":[4,5,6],"C":[7,8,9]})# 注意,在列索引的時候,也應該使用loc和iloc在對位置和索引名字進行區分# 為了操作方便,在使用dataframe多數都是在處理二維數據,都有列標籤的名字# 默認傳入的標籤都是索引名字# display(df)
  • Pandas知識點-Series數據結構介紹
    也可以傳入一個一維數組,然後用index參數設置行索引,不設置行索引時默認為數值型索引,即從0開始的整數,如上面的s2。Series中保存的數據data可以是整數、浮點數、字符串、Python對象等類型的數據。數據data和索引index都是array-like的數據,且都是一維的。
  • Pandas-DataFrame基礎知識點總結
    DataFrame的創建有多種方式,不過最重要的還是根據dict進行創建,以及讀取csv或者txt文件來創建。這裡主要介紹這兩種方式。DataFrame的方式有很多,比如我們可以通過讀取mysql或者mongoDB來生成,也可以讀取json文件等等,這裡就不再介紹。
  • paipai教你pandas(1) DataFrame的列維度操作
    paipai教你pandas教程系列的第1篇文章,DataFrame是表格型的數據類型,有列和行兩個維度,本篇教程講解pandas
  • 超詳細教程|pandas合併之append和concat(上)
    本系列文章主要介紹了pandas中對series和dataframe對象進行連接的方法:pd.append()和pd.concat(),文中通過示例代碼對這兩種方法進行了詳細的介紹,希望能對各位python小白的學習有所幫助。
  • Pandas系列 - 基本數據結構
    二、pandas.DataFrame數據幀(DataFrame)是二維數據結構,即數據以行和列的表格方式排列數據幀(DataFrame)的功能特點:構造函數:pandas.DataFrame(data,
  • 數據分析利器 pandas 系列教程(二):強大的 DataFrame
    創建 dataframe 的常見方式同 series 一樣,dataframe 也有 index,不同的是,series 除了 index,只有一列,而 dataframe 通常有很多列,比如上面的 dataframe 就有四列,而且都有名字:name、sex、course、grade,通過這些名字,可以索引到某一列,這些名字稱為列(索引),因此,在 dataframe
  • Pandas中groupby的這些用法你都知道嗎?
    理解groupby的原理可參考官網給出的解釋:其中:groupby首先要指定分組原則,這也是groupby函數的第一步,其常用參數包括:by,分組欄位,可以是列名/series/字典/函數,常用為列名axis,指定切分方向,默認為0,表示沿著行切分as_index,是否將分組列名作為輸出的索引,默認為True;當設置為
  • Pandas入門篇:Pandas基礎
    基本數據結構、常用基本函數及排序四個模塊快速入門。創建Series常見屬性有 values, index, name, dtypes = pd.Series(np.random.randn(5), index=['a','b','c','d','e'],               name='this is a series', dtype
  • Python數據分析入門日記Day6:數據分析庫Pandas:Series和Dataframe
    Python數據分析入門日記Day6——Pandas:Series和Dataframe從今天起,開始學習Python中另一個經常用到的庫——Pandas,Pandas作為數據分析庫在日常的數據分析工作中起到重要作用,是一個基於Numpy的、處理數據較為專業的庫。
  • 十分鐘快速入門 Pandas
    我們不想一直寫 pandas 的全名,但是保證代碼的簡潔和避免命名衝突都很重要,所以折中使用 pd 。如果你去看別人使用  pandas 的代碼,就會看到這種導入方式。Pandas 中的數據類型Pandas 基於兩種數據類型,series 和 dataframe。series 是一種一維的數據類型,其中的每個元素都有各自的標籤。
  • Pandas 基本使用(二) — DataFrame.to_dict() 函數使用
    (列名) :{[ values ](值)}};orient ='series' ,轉化後的字典形式:{column(列名) : Series (values) (值)};orient ='split' ,轉化後的字典形式:{'index' : [index],『columns' :[columns],』data