主頁 > 後端開發 > 一篇文章讓你快速入門Pandas

一篇文章讓你快速入門Pandas

2021-04-23 10:57:43 後端開發

目錄

  • Pandas介紹
    • 簡單介紹
    • Pandas的基本功能
    • Pandas的優勢
    • 資料結構
      • 為什么有多個資料結構
      • 大小可變與資料復制
  • Pandas的基本內容
    • Pandas的基礎方法
    • 資料的生成與有關方法
      • 一維陣列
      • 二維陣列
      • 陣列的其余方法
    • Pandas的選擇資料
      • 用標簽選取資料
      • 切片
      • 利用iloc進行選擇
      • Boolean indexing布爾索引
    • Pandas的缺失值處理
      • 洗掉缺失值的行
      • 填充缺失值
      • 提取NAN值的布爾掩碼
    • Pandas的運算
      • 統計
    • 合并
      • concat合并
      • join合并
      • append追加
    • Pandas資料的匯入與匯出
      • 資料匯入
      • 資料匯出
      • 應用實體
    • Pandas資料的可視化
      • 一維資料的可視化
      • 二維陣列的可視化

Pandas介紹

我將在下面簡單介紹Pandas,詳細資訊可以看官方檔案Pandas中文官方檔案

簡單介紹

pandas是python的核心資料分析支持,提供了快速、靈活、明確的資料結構,旨在簡單直觀地處理關系型和標記型資料,Pandas 的目標是成為 Python 資料分析實踐與實戰的必備高級工具,其長遠目標是成為最強大、最靈活、可以支持任何語言的開源資料分析工具,經過多年不懈的努力,Pandas 離這個目標已經越來越近了,

Pandas的基本功能

Pandas適用于處理以下型別的資料:
1.與 SQL 或 Excel 表類似的,含異構列的表格資料;
2.有序和無序(非固定頻率)的時間序列資料;
3.帶行列標簽的矩陣資料,包括同構或異構型資料;
4.任意其它形式的觀測、統計資料集, 資料轉入 Pandas 資料結構時不必事先標記,
pandas的主要資料結構是Series(一維資料)和DataFrame(二維資料),Pandas 基于 NumPy (opens new window)開發,可以與其它第三方科學計算支持庫完美集成,

Pandas的優勢

Pandas比較與其他的資料處理有很多優勢,下面列出部分優勢:
1.處理浮點與非浮點資料里的缺失資料,表示為 NaN;
2.大小可變:插入或洗掉 DataFrame 等多維物件的列;
3.自動、顯式資料對齊:顯式地將物件與一組標簽對齊,也可以忽略標簽,在 Series、DataFrame 計算時自動與資料對齊;
4.強大、靈活的分組(group by)功能:拆分-應用-組合資料集,聚合、轉換資料;
5.把 Python 和 NumPy 資料結構里不規則、不同索引的資料輕松地轉換為 DataFrame 物件;
6.基于智能標簽,對大型資料集進行切片、花式索引、子集分解等操作;
7.直觀地合并(merge)、連接(join)資料集;
8.靈活地重塑(reshape)、透視(pivot)資料集;
9.軸支持結構化標簽:一個刻度支持多個標簽;
10.成熟的 IO 工具:讀取文本檔案(CSV 等支持分隔符的檔案)、Excel 檔案、資料庫等來源的資料,利用超快的 HDF5 格式保存 / 加載資料;
11.時間序列:支持日期范圍生成、頻率轉換、移動視窗統計、移動視窗線性回歸、日期位移等時間序列功能,

資料結構

Series 帶標簽的一維同構陣列
DataFrame 帶標簽的,大小可變的,二維異構表格

為什么有多個資料結構

Pandas 資料結構就像是低維資料的容器,比如,DataFrame 是 Series 的容器,Series 則是標量的容器,使用這種方式,可以在容器中以字典的形式插入或洗掉物件,處理 DataFrame 等表格資料時,index(行)或 columns(列)比 axis 0 和 axis 1 更直觀,用這種方式迭代 DataFrame 的列,代碼更易讀易懂

大小可變與資料復制

Pandas 所有資料結構的值都是可變的,但資料結構的大小并非都是可變的,比如,Series 的長度不可改變,但 DataFrame 里就可以插入列,
Pandas 里,絕大多數方法都不改變原始的輸入資料,而是復制資料,生成新的物件, 一般來說,原始輸入資料不變更穩妥,

Pandas的基本內容

Pandas的基礎方法

資料的生成與有關方法

一維陣列

# 生成一個Series型別的一維陣列
a = pd.Series([1, 2, 3, np.nan, 44, 1])
print(a)

0     1.0
1     2.0
2     3.0
3     NaN
4    44.0
5     1.0
dtype: float64

二維陣列

dates = pd.date_range('20200127', periods=6)
print(dates)
'''第一個引數是資料,第二個引數是行,第三個是列,
詳情可以用print(help(pd.DataFrame))查看'''
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=['a', 'b', 'c', 'd'])
print(df)

DatetimeIndex(['2020-01-27', '2020-01-28', '2020-01-29', '2020-01-30',
               '2020-01-31', '2020-02-01'],
              dtype='datetime64[ns]', freq='D')
                   a         b         c         d
2020-01-27  0.292798 -0.217713 -0.535531 -0.113389
2020-01-28  0.811442 -0.761526 -1.245899 -0.083227
2020-01-29  1.445080  2.055359 -1.355587  0.148992
2020-01-30 -0.486965  0.151710  0.574553  0.371862
2020-01-31  1.840392  1.384281  0.580354  2.058363
2020-02-01  0.704466 -0.469254 -0.010766  0.395096
# 指定矩陣直接轉換成二維陣列
df1 = pd.DataFrame(np.arange(12).reshape((3, 4)))
print(df1)
   0  1   2   3
0  0  1   2   3
1  4  5   6   7
2  8  9  10  11
# 利用字典的方法進行生成
df2 = pd.DataFrame({'A':1, 'B':pd.Timestamp('20210127'), 'C':np.array([3]*4)})
print(df2)
   A          B  C
0  1 2021-01-27  3
1  1 2021-01-27  3
2  1 2021-01-27  3
3  1 2021-01-27  3

陣列的其余方法

print(df2.dtypes)#列印行列的型別
print(df2.columns)#列印行列的序號
print(df2.values)#列印他們的資料
print(df2.describe())#列印數字的平均值,最大值,最小值
print(df2.T)#轉置
print(df2.sort_index(axis=1,ascending=False))#對列排序,倒序(True正序),排序只是對序號
print(df2.sort_values(by='A'))#對值排序,對A,如果不加括號就是所有排序

Pandas的選擇資料

import pandas as pd
import numpy as np
dates = pd.date_range('20210127', periods=6)
df = pd.DataFrame(np.arange(24).reshape((6, 4)), index=dates, columns=['a', 'b', 'c', 'd'])

Pandas支持利用標簽對資料進行選擇,同時也支持切牌你對資料進行操作

用標簽選取資料

# 列印a標簽的所有數值
print(df['a'], df.a)

2021-01-27     0
2021-01-28     4
2021-01-29     8
2021-01-30    12
2021-01-31    16
2021-02-01    20
Freq: D, Name: a, dtype: int32 2021-01-27     0

切片

print(df[0:3], df['20210127':'20210129'])#切片
            a  b   c   d
2021-01-27  0  1   2   3
2021-01-28  4  5   6   7
2021-01-29  8  9  10  11             a  b   c   d
2021-01-27  0  1   2   3
2021-01-28  4  5   6   7
2021-01-29  8  9  10  11
print(df.loc['20210128'])#進行選取
a    4
b    5
c    6
d    7
Name: 2021-01-28 00:00:00, dtype: int32        
print(df.loc[:, ['a', 'b']])# 列印所有行和a, b 兩列
             a   b
2021-01-27   0   1
2021-01-28   4   5
2021-01-29   8   9
2021-01-30  12  13
2021-01-31  16  17
2021-02-01  20  21

利用iloc進行選擇

print(df.iloc[3, 1])#利用索引進行選取
print(df.iloc[2:5, 1:3])#切片
print(df.iloc[[1, 3, 5], 1:3])# 索引加切片

Boolean indexing布爾索引

print(df[df.a>8])#列印所有數字大于8的那些行
             a   b   c   d
2021-01-30  12  13  14  15
2021-01-31  16  17  18  19
2021-02-01  20  21  22  23

Pandas的缺失值處理

在進行資料處理的程序中很容易遇到空值,對于空值我們也有相應的做法

import pandas as pd
import numpy as np
dates = pd.date_range('20200302', periods=6)
df = pd.DataFrame(np.arange(24).reshape((6, 4)), index=dates, columns = list("ABCD"))

我們先定義幾個空值來示范

df.iloc[0,1] = np.nan
df.iloc[1,2] = np.nan

洗掉缺失值的行

print(df.dropna(axis=0, how='any'))

             A     B     C   D
2020-03-04   8   9.0  10.0  11
2020-03-05  12  13.0  14.0  15
2020-03-06  16  17.0  18.0  19
2020-03-07  20  21.0  22.0  23

填充缺失值

print(df.fillna(value=0))

             A     B     C   D
2020-03-02   0   0.0   2.0   3
2020-03-03   4   5.0   0.0   7
2020-03-04   8   9.0  10.0  11
2020-03-05  12  13.0  14.0  15
2020-03-06  16  17.0  18.0  19
2020-03-07  20  21.0  22.0  23

提取NAN值的布爾掩碼

print(df.isnull())
print(np.any(df.isnull())==True)

                A      B      C      D
2020-03-02  False   True  False  False
2020-03-03  False  False   True  False
2020-03-04  False  False  False  False
2020-03-05  False  False  False  False
2020-03-06  False  False  False  False
2020-03-07  False  False  False  False
True

Pandas的運算

統計

一般情況下,運算時排除缺失值,

'''df.mean()等價于df.mean(0),把軸向資料求平均,得到每列資料的平均值,
df.mean(1)按照另外一個axis的方向來求平均,得到每行資料的平均值,'''
df.mean()
df.mean(1)

不同維度物件運算時,要先對齊,

合并

concat合并

df0 = pd.DataFrame(np.ones((3, 4))*0, columns=list('abcd'),index=[1, 2, 3])
df1 = pd.DataFrame(np.ones((3, 4))*1, columns=list('abcd'),index=[2, 3, 4])
df2 = pd.DataFrame(np.ones((3, 4))*1, columns=list('abcd'))
# 以行的形式進行合并,如果列不夠就忽視
res = pd.concat([df0,df1,df2],axis=0,ignore_index=True)

join合并

left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
                             'A': ['A0', 'A1', 'A2', 'A3'],
                             'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
                              'C': ['C0', 'C1', 'C2', 'C3'],
                              'D': ['D0', 'D1', 'D2', 'D3']})
res = pd.merge(left, right, on='key')
# how = ['left', 'right', 'outer', 'inner']
res1 = pd.merge(left, right, on='key', how='inner')

append追加

 result = df1.append(df2)

在這里插入圖片描述

Pandas資料的匯入與匯出

資料匯入

pd.read_csv(filename):從CSV檔案匯入資料
pd.read_table(filename):從限定分隔符的文本檔案匯入資料
pd.read_excel(filename):從Excel檔案匯入資料
pd.read_sql(query, connection_object):從SQL表/庫匯入資料
pd.read_json(json_string):從JSON格式的字串匯入資料
pd.read_html(url):決議URL、字串或者HTML檔案,抽取其中的tables表格
pd.read_clipboard():從你的粘貼板獲取內容,并傳給read_table()
pd.DataFrame(dict):從字典物件匯入資料,Key是列名,Value是資料

資料匯出

df.to_csv(filename):匯出資料到CSV檔案
df.to_excel(filename):匯出資料到Excel檔案
df.to_sql(table_name, connection_object):匯出資料到SQL表
df.to_json(filename):以Json格式匯出資料到文本檔案

應用實體

import pandas as pd
#匯入xlsx格式的資料檔案
data=pd.read_excel('檔案地址',sheetname='Sheet1')
 
#匯入csv格式的資料檔案
data=pd.read_csv('檔案地址',sheetname='Sheet1')
 
#匯入txt格式的資料檔案,可能會涉及編碼問題或者中文路徑需要先用open函式打開連接,并進行轉碼
op=open('檔案地址',encoding='utf-8')
data=pd.read_table(op)
 

Pandas資料的可視化

我們可以利用matplotlib進行資料的可視化,利用其中的個plot包進行出圖

一維資料的可視化

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# Series
data = pd.Series(np.random.randn(1000), index=np.arange(1000))
data = data.cumsum()
data.plot()
plt.show()

在這里插入圖片描述

二維陣列的可視化

data = pd.DataFrame(np.random.randn(1000, 4), index=np.arange(1000), columns=list("ABCD"))
data = data.cumsum()
print(data.head(3))
data.plot()
plt.show()
'''
plot methods:
'bar', 'hist','box','area','scatter','pie'
分別是柱狀圖,直方圖,盒圖,區域面積圖,散點圖,餅圖
'''
ax = data.plot.scatter(x='A', y='B',color='DarkBlue', label="Class 1")
data.plot.scatter(x='A', y='C',color='DarkGreen', label="Class 2",ax=ax)
plt.show()

在這里插入圖片描述

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/279269.html

標籤:python

上一篇:實驗六 串列與元組 (下)

下一篇:matplotlib-bilibili,抖音很火的動態資料視頻自動生成(第四節)-視頻,語音合成

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more