《愛上潘大師》系列 | 一文看懂DataFrame的創建



2020,努力做一個無可替代的人!



寫在前面的話

如果你還記得那年大明湖畔的xiaoyige,那你就應該來看看這篇文章

我們學的是技術,小一我寫的可是技術文章,哪來那麼多情啊愛啊的

今天的內容很重要的!

先複習一下前面的文章:

可能有的同學不理解複習的意義,我簡單說一下:

我寫系列文章的時候都會先列好整個系列的大綱,甚至有時候幾篇文章是同一天肝出來的。

這就造成有時候這一篇文章的概念會及其依賴上一篇文章,所以呢,花個兩三分鐘複習一下上一篇,你會更好理解這篇文章。


正文

今天介紹潘大師的另一種數據結構:Dataframe,一個表格型的數據結構。

對於Series 我們只用了一小節介紹,而Dataframe 可能會用三節內容,孰輕孰重應該都清楚吧

學習DataFrame,小一建議你最好和Excel表格聯繫起來

Excel 表格有行索引、列索引,有數據塊,有數據的查找、替換、去重,有數據的透視,彙總,有不同表的數據匹配等等這些。

DataFrame 的初衷就是爲了解決這些問題,簡潔、易用的功能也是作者最初的願景

所以 ,後面的系列文章,如果你對某個概念不是很理解,想一想 Excel 中是怎麼表述的

創建 DataFrame

先來一個DataFrame 介紹三連

DataFrame 有行(索引)、有列(索引),可以看做是由一個個的Series 組成的字典。

DataFrame 每列可以是不同的值類型(數值、字符串、布爾值)

DataFrame 中的數據是以一個或多個二維塊存放的

那DataFrame 都有哪些創建方式?

和NumPy 一樣,DataFrame 創建方式也有很多種

常見的有:

  • 通過二維ndarray 創建

  • 通過字典創建

  • 通過列表創建

  • 通過另一個DataFrame 創建

下面簡單介紹一下常用的,剩下的同學們自己拓展

通過二維ndarray創建DataFrame

創建一個二維的ndarray 數組,該數組即DataFrame 的數據集

# 通過二維ndarray創建DataFrame
arr_data = np.arange(12).reshape(3, 4)
df_data1 = pd.DataFrame(arr_data)

# 輸出
   0  1   2   3
0  0  1   2   3
1  4  5   6   7
2  8  9  10  11

結果DataFrame 會自動加上行索引和列索引,和Series 的創建一樣

那應該怎麼顯示聲明行、列索引?

也和Series 的創建一樣,在創建的時候手動指定就行

# 通過二維ndarray創建DataFrame
columns = ['one', 'two', 'three', 'four']
index = ['a', 'b', 'c']
# 顯示指定行、列索引
df_data1 = pd.DataFrame(arr_data, columns=columns, index=index)

# 輸出
   one  two  three  four
a    0    1      2     3
b    4    5      6     7
c    8    9     10    11

記住列索引(想要成Excel 的列名):columns

行索引(想象成Excel 的序號):index

默認的行列索引都是從0開始

通過字典創建DataFrame

這裏面的字典包括很多,比如:

  • 數組、元祖 、列表 組成的字典
  • 字典組成的字典(嵌套)
  • Series 組成的字典

只要數據是字典格式,就可以做數據集

字典的key作爲DataFrame的行索引

# 通過字典創建DataFrame
dict_data = {
	'name': ['xiaoyi', 'xiaosi', 'xiaoqi'],
	'age': [11, 14, 17],
	'score': [95.5, 94.5, 97]
}
df_data2 = pd.DataFrame(dict_data)

# 輸出
     name  age  score
0  xiaoyi   11   95.5
1  xiaosi   14   94.5
2  xiaoqi   17   97.0

列索引是字典的 key 值,行索引自動填充

當然字典裏面的值數據類型你可以盡情變化,Series、元祖、列表等都是可以的

通過列表創建DataFrame

同樣的,這裏的列表類型也不止一種:

  • 字典組成的列表
  • Series 組成的列表
# 通過列表創建DataFrame
list_data = [
	{'one': 1, 'two': 2},
	{'one': 1, 'two': 2, 'three': 4}
]
df_data3 = pd.DataFrame(list_data)

# 輸出
   one  two  three
0    1    2    NaN
1    1    2    4.0

主要就是這三種創建方式,有些書上寫的過於複雜,讓人眼花繚亂

萬變不離其宗,核心就是這三種

至於第四種通過其他DataFrame創建,就不多說了吧?

經常讀我文章的同學要是會了前三種,還不會第四種?

不妨看一下NumPy 的數組創建?順便反思一下?

索引對象

DataFrame 已經創建好了,但是索引還不太明白,是和Series的一樣嗎?

能想到Series,說明你差不多都知道是怎麼回事了

構建Series 或者DataFrame 時,所用到的任何數據的標籤都會被轉換成Index對象

Index 對象是不可修改的,這樣可以保證多個數據結構之間的安全共享

畢竟人家可是索引,你索引要是都一樣了,那到底應該指向誰就說不清了

我們可以使用重新索引的方法 reindex

reindex 的用處相當大,我詳細介紹一下參數

reindex(index, method, fille_value, limit, level, copy)

參數 說明
index 用作索引的新序列
method 插值(填充)方式,包括:ffill(前向填充值)、bfill(後向填充值)
fill_value 在重新索引的過程中,需要引入缺失值時使用的替代值
limit 前向或後向填充時的最大填充量

在DataFrame中,存在行、列索引,不同於Series 中只有單一索引。

所以DataFrame中 reindex 可以行、列索引都修改

先看單一索引

# 創建 Series
series_data = pd.Series([1, 2, 4, 5], index=['a', 'b', 'c', 'e'])
# 輸出
a    1
b    2
c    4
e    5
dtype: int64

# 重新索引
series_data = series_data.reindex(['a', 'b', 'c', 'd', 'e'], fill_value=-1)
# 輸出
a    1
b    2
c    4
d   -1
e    5
dtype: int64

reindex 會根據新索引進行重排,如果某個索引值不存在,則使用 fille_value 的值進行填充

還記得前面說的DataFrame 中行、列索引分別是什麼嗎?

  • 行索引:index (想象成Excel 中的序號)
  • 列索引:columns (想象成Excel 中的列標籤)
df_data2
# 輸出
     name  age  score
0  xiaoyi   11   95.5
1  xiaosi   14   94.5
2  xiaoqi   17   97.0

# 行、列重新索引
columns = ['name', 'age', 'score', 'score2']
index = [0, 1, 2, 3]
df_data2 = df_data2.reindex(index=index, columns=columns)
# 輸出
     name   age  score  score2
0  xiaoyi  11.0   95.5     NaN
1  xiaosi  14.0   94.5     NaN
2  xiaoqi  17.0   97.0     NaN
3     NaN   NaN    NaN     NaN

對行、列都進行重新索引,索引值不存在的會用空值填充

索引很重要,是Pandas 數據模型的重要部分,但是我們瞭解上面的內容就夠了,也沒必要去深究它。

總結一下:

今天主要介紹了DataFrame 的創建和索引的相關操作。

創建方法也是一如既往的多,不過不要慌,真正用起來的時候基本都是從文件中讀數據,就一個方法。

索引這一塊不要搞混行索引、列索引。

對於索引的一些方法最好是掌握,我寫出來的都是常用的,不是常用的我也懶得寫,你要是還糾結那就查API 文檔細品吧

寫在後面的話

每天進步一點點,學習不就是這麼來的嗎?

寫這篇文章的時候,我接到了一個關係很好的朋友的消息。

他的考研成績公佈了,邊工作邊複習的他,考研歷程是我認識的人中最艱難的、最辛苦的。

等他有空,我去取取經,投稿部分應該會有新文章,期待一下

碎碎念一下

上一節碎碎念太多,一下沒控制住自己

算算時間,去年十二月份定下的小目標:每週兩篇原創文 ,除了春節期間,應該都實現了。


原創不易,歡迎點贊噢

文章首發:公衆號【知秋小一】

文章同步:掘金,簡書,csdn


原文鏈接:《愛上潘大師》系列- 你還記得那年的DataFrame 嗎


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