中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

臨時(shí)工找工作網(wǎng)站做美縫成都網(wǎng)站優(yōu)化排名

臨時(shí)工找工作網(wǎng)站做美縫,成都網(wǎng)站優(yōu)化排名,濟(jì)南最新疫情文件通知,系統(tǒng)開(kāi)發(fā)文檔前言: 💞💞大家好,我是書(shū)生?,本階段和大家一起分享和探索數(shù)據(jù)分析,本篇文章主要講述了:Pandas進(jìn)階指南:核心計(jì)算方法、缺失值處理及數(shù)據(jù)類(lèi)型管理等等。歡迎大家一起探索討論&#x…

前言:
💞💞大家好,我是書(shū)生?,本階段和大家一起分享和探索數(shù)據(jù)分析,本篇文章主要講述了:Pandas進(jìn)階指南:核心計(jì)算方法、缺失值處理及數(shù)據(jù)類(lèi)型管理等等。歡迎大家一起探索討論!!!
💞💞代碼是你的畫(huà)筆,創(chuàng)新是你的畫(huà)布,用它們繪出屬于你的精彩世界,不斷挑戰(zhàn),無(wú)限可能!

個(gè)人主頁(yè)?: 書(shū)生?
gitee主頁(yè)🙋?♂:閑客
專(zhuān)欄主頁(yè)💞:大數(shù)據(jù)開(kāi)發(fā)
博客領(lǐng)域💥:大數(shù)據(jù)開(kāi)發(fā),java編程,前端,算法,Python
寫(xiě)作風(fēng)格💞:超前知識(shí)點(diǎn),干貨,思路講解,通俗易懂
支持博主💖:關(guān)注?,點(diǎn)贊、收藏?、留言💬

目錄

  • 1. Pandas 計(jì)算方式
    • 1.1 排序函數(shù)
      • 1.1.1 nlargest和nsmallest函數(shù)
      • 1.1.2 sort_values函數(shù)
    • 1.2 聚合函數(shù)
      • 1.2.1 min最小值
      • 1.2.2 mean 平均值
      • 1.2.3 sum 求和
      • 1.2.4 count 計(jì)數(shù)
      • 1.2.5 std函數(shù)計(jì)算標(biāo)準(zhǔn)偏差
      • 1.2.6 median:中位數(shù)
      • 1.2.7 cumsum 累計(jì)求和
      • 1.2.8 quantile函數(shù)計(jì)算分位數(shù)
      • 1.2.9 describe() 統(tǒng)計(jì)描述
      • 1.2.10 corr 相關(guān)系數(shù)
    • 1.3 Pandas函數(shù)小結(jié)
  • 2. Pandas 缺失值
    • 2.1 Pandas缺失值的特點(diǎn)
    • 2.2 加載包含缺失的數(shù)據(jù)
    • 2.3 查看缺失值
      • 2.3.1 info查看缺失值個(gè)數(shù)
      • 2.3.2 判斷數(shù)據(jù)值是否是缺失值
      • 2.2.3 統(tǒng)計(jì)缺失值個(gè)數(shù)
    • 2.4 Missingno庫(kù)對(duì)缺失值的情況進(jìn)行可視化探查
      • 2.4.1 missingno.bar(df)缺失值數(shù)量可視化
      • 2.4.2 missingno.matrix(df)缺失值位置的可視化
      • 2.4.3 missingno.heatmap(df)缺失值之間相關(guān)性可視化
  • 3. 缺失值處理
    • 3.1 dropna刪除缺失值
    • 3.2 填充缺失值
      • 3.2.1 常數(shù)值填充
      • 3.2.2 fillna前后值填充缺失值
      • 3.2.3 interpolate線(xiàn)性插值
    • 3.3 缺失值處理小結(jié)
  • 4. Pandas數(shù)據(jù)類(lèi)型
    • 4.1 Pandas 的數(shù)據(jù)結(jié)構(gòu)
    • 4.2 查看數(shù)據(jù)類(lèi)型
    • 4.3 數(shù)據(jù)類(lèi)型轉(zhuǎn)換
      • 4.3.1 seriers.astype函數(shù)轉(zhuǎn)換數(shù)據(jù)類(lèi)型
      • 4.3.2 pd.to_numeric函數(shù)字符串轉(zhuǎn)數(shù)字類(lèi)型
    • 4.4 category 分類(lèi)類(lèi)型
      • 4.4.1 創(chuàng)建 category 分類(lèi)類(lèi)型
      • 4.4.2 category 分類(lèi)類(lèi)型轉(zhuǎn)換
    • 4.5 datetime時(shí)間類(lèi)型
      • 4.5.1 查看數(shù)據(jù)時(shí)間
      • 4.5.2 創(chuàng)建日期時(shí)間
      • 4.5.3 時(shí)間戳
      • 4.5.4 時(shí)間函數(shù)格式化
      • 4.5.5 日期類(lèi)型的轉(zhuǎn)換
    • 4.6 提取日期類(lèi)型的部分時(shí)間
      • 注意事項(xiàng)
    • 4.7 日期類(lèi)型運(yùn)算
      • 4.8 日期類(lèi)型列作為索引
      • 4.8.1 df.set_index(keys='列名') 設(shè)置索引
      • 4.8.2 加載數(shù)據(jù)的時(shí)候指定索引
      • 4.8.3 日期類(lèi)型索引獲取部分?jǐn)?shù)據(jù)
  • 5. timedelta時(shí)間差類(lèi)型
    • 5.1 timedelta時(shí)間差類(lèi)型 介紹
    • 5.2 時(shí)間差類(lèi)型運(yùn)算
    • 5.3 pd.to_timedelta函數(shù)轉(zhuǎn)換timedelta類(lèi)型
    • 5.4 timedelta類(lèi)型數(shù)據(jù)作為df索引
  • 6. Pandas 數(shù)據(jù)類(lèi)型的小結(jié)
    • 6.1 Pandas中的數(shù)據(jù)類(lèi)型
    • 6.2 Pandas中數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)類(lèi)型的關(guān)系
    • 6.3 Pandas數(shù)據(jù)類(lèi)型轉(zhuǎn)換基本方法
    • 6.4 category分類(lèi)類(lèi)型
    • 6.5 datetime時(shí)間類(lèi)型
    • 6.6 timedelta時(shí)間差類(lèi)型

1. Pandas 計(jì)算方式

Pandas 是一個(gè)強(qiáng)大的 Python 數(shù)據(jù)分析庫(kù),提供了許多用于數(shù)據(jù)處理和分析的高效函數(shù)。以下是一些常用的計(jì)算函數(shù):

基本統(tǒng)計(jì)函數(shù)

  • mean(): 計(jì)算平均值。
  • median(): 計(jì)算中位數(shù)。
  • sum(): 計(jì)算總和。
  • min(), max(): 分別計(jì)算最小值和最大值。
  • std(), var(): 計(jì)算標(biāo)準(zhǔn)差和方差。
  • quantile(): 計(jì)算分位數(shù)。

描述性統(tǒng)計(jì)

  • describe(): 返回描述性統(tǒng)計(jì)信息,包括計(jì)數(shù)、平均值、標(biāo)準(zhǔn)差、最小值、四分位數(shù)和最大值等。

排序

  • sort_values(): 按值排序。
  • sort_index(): 按索引排序。

聚合與分組

  • groupby(): 對(duì)數(shù)據(jù)進(jìn)行分組操作,之后可以應(yīng)用其他聚合函數(shù)如 sum(), mean() 等。
  • agg(): 應(yīng)用多個(gè)聚合函數(shù)到不同的列上。

索引和切片

  • iloc[]: 通過(guò)位置索引選擇數(shù)據(jù)。
  • loc[]: 通過(guò)標(biāo)簽索引選擇數(shù)據(jù)。

數(shù)據(jù)轉(zhuǎn)換

  • apply(): 應(yīng)用自定義函數(shù)到每一行或每一列。
  • map(): 應(yīng)用于 Series 中的元素,通常用于替換值。
  • replace(): 替換 DataFrame 或 Series 中的值。

缺失值處理

  • isnull(): 判斷值是否為空。
  • notnull(): 判斷值是否非空。
  • dropna(): 刪除缺失值。
  • fillna(): 填充缺失值。

在這里插入圖片描述

1.1 排序函數(shù)

1.1.1 nlargest和nsmallest函數(shù)

  • nlargest(n=, columns=[列名1, 列名2, ...]): 實(shí)現(xiàn)對(duì)指定列的值由大到小排序, 返回前n行數(shù)據(jù)
  • nsmallest(n=, columns=[列名1, 列名2, ...]): 實(shí)現(xiàn)對(duì)指定列的值由小到大排序, 返回前n行數(shù)據(jù)、

n: 整數(shù), n行數(shù)據(jù), 默認(rèn)為5
列名: 指定排序的列名

第一個(gè)列有一樣的再根據(jù)在下一個(gè)列排序

加載數(shù)據(jù):

import pandas as pd
import numpy as np
# 加載數(shù)據(jù)集
df = pd.read_csv('../data/LJdata.csv')
df2 = df.head(10)
df2

在這里插入圖片描述

  • 對(duì)列值進(jìn)行降序后取前n個(gè)
# 按面積和價(jià)格排序,取前5個(gè)
df2.nlargest(n=5, columns=['面積', '價(jià)格'])

在這里插入圖片描述

  • 對(duì)列值進(jìn)行升序后取前n個(gè)
# 按面積和價(jià)格排序,取后5個(gè)
# #keep 默認(rèn)為first ,值相同時(shí)誰(shuí)在前,索引小的在前面
df2.nsmallest(n=5, columns=['面積', '價(jià)格'])

在這里插入圖片描述

1.1.2 sort_values函數(shù)

通過(guò) df.sort_values(by=列名列表, ascending=) 方法根據(jù)指定列指定排序方式排序
ascending: True或False, 默認(rèn)True->升序, 也可以接收布爾值列表, 每列指定排序方式
等同于 order by 列名 排序方式

  • 升序
# 對(duì)價(jià)格列進(jìn)行升序排列
df2.sort_values(by='價(jià)格', ascending=True)

在這里插入圖片描述

  • 降序

如果前面有多個(gè)列名,但是只有一個(gè)TRUE或者FALSE那么全部列都按照這個(gè)排序,ascending也可以跟排序列表scending=[False,True] 第一個(gè)列按照降序,第一個(gè)相同的時(shí)候在第二個(gè)按照升序排序

# 對(duì)價(jià)格和面積列進(jìn)行降序排列
df2.sort_values(by=['價(jià)格','面積'], ascending=False)
df2.sort_values(by=['價(jià)格','面積'], ascending=[False,True])

在這里插入圖片描述

  • 索引值排序
# 索引值排序
print(df2.sort_index(ascending=True).head(5))
df2.sort_index(ascending=False).head(5)

在這里插入圖片描述

1.2 聚合函數(shù)

常用聚合函數(shù)有:不統(tǒng)計(jì)NAN值

  • corr 相關(guān)性
  • min 最小值
  • max 最大值
  • mean 平均值
  • std 標(biāo)準(zhǔn)偏差
  • quantile 分位數(shù)
  • sum 求和

1.2.1 min最小值

df.min() 對(duì)每一列求最小值,會(huì)返回df中每一列的最小值構(gòu)成的Series
df['列名'].min() 對(duì)某一列求最小值

# min 最小值 # 對(duì)某一列求最小值
print(df2['價(jià)格'].min())
# 對(duì)每一列求最小值
df2.min()

在這里插入圖片描述

1.2.2 mean 平均值

df.mean() 對(duì)每一列求平均值
df['列名'].mean() 對(duì)某一列求平均值
mean函數(shù)計(jì)算平均值,用法和min函數(shù)的用法一致,但只會(huì)對(duì)數(shù)值類(lèi)型的數(shù)據(jù)進(jìn)行計(jì)算
只對(duì)數(shù)值列有效

# mean 平均值,只對(duì)數(shù)值列有效
df2.mean()

在這里插入圖片描述

1.2.3 sum 求和

df.sum() 對(duì)每一列求求和
df['列名'].sum() 對(duì)某一列求求和

# sum 求和
# 對(duì)某一列求和
print(df2['面積'].sum())
# 對(duì)每一列求和
df2.sum()

在這里插入圖片描述

1.2.4 count 計(jì)數(shù)

df.count() 對(duì)每一列計(jì)數(shù)
df['列名'].count() 對(duì)某一列計(jì)數(shù)
不統(tǒng)計(jì)NAN

# count 計(jì)數(shù)
# 對(duì)每一列計(jì)數(shù),不統(tǒng)計(jì)NAN
print(df2.count())

在這里插入圖片描述

統(tǒng)計(jì)包含空值個(gè)數(shù):行數(shù)

# 統(tǒng)計(jì)包含空值個(gè)數(shù):行數(shù)
print(len(df2))
print(df2.shape[0])
print(df2['價(jià)格'].size)
# 包含NAN  列數(shù)
df2.count(axis=1)

在這里插入圖片描述

1.2.5 std函數(shù)計(jì)算標(biāo)準(zhǔn)偏差

df.std() 對(duì)每一列標(biāo)準(zhǔn)差
df['列名'].std() 對(duì)某一列標(biāo)準(zhǔn)差
df.var() 對(duì)每一列方差
df['列名'].var() 對(duì)某一列方差

標(biāo)準(zhǔn)偏差:用以衡量數(shù)據(jù)值偏離算術(shù)平均值的程度。標(biāo)準(zhǔn)偏差越小,這些值偏離平均值就越少,反之亦然。
標(biāo)準(zhǔn)差=方差開(kāi)方
方差=每個(gè)值和平均值差值的平方

只對(duì)數(shù)值計(jì)算

# 標(biāo)準(zhǔn)差: sqrt(mean(x-mean(x))^2)  方差開(kāi)方
# 衡量數(shù)據(jù)值的離散程度 -> 標(biāo)準(zhǔn)差越小, 數(shù)據(jù)值越集中
# 對(duì)每列求標(biāo)準(zhǔn)差
print(df2.std())
# 對(duì)一列求標(biāo)準(zhǔn)差
print(df2['價(jià)格'].std())
# 方差: mean(x-mean(x))^2
# 對(duì)每一列求方差
print(df2.var())
# 對(duì)某一列求方差
print(df2['價(jià)格'].var())

在這里插入圖片描述

1.2.6 median:中位數(shù)

df.median() 對(duì)每一列中位數(shù)
df['列名'].median() 對(duì)某一列中位數(shù)
df.mode() 對(duì)每一列眾數(shù)
df['列名'].mode() 對(duì)某一列眾數(shù)

print(df2['價(jià)格'].var())
#%%
# median:中位數(shù)
# 對(duì)每一列求中位數(shù)
print(df2.median())
# 對(duì)某一列求中位數(shù)
print(df2['價(jià)格'].median())
# mode:眾數(shù)
# 對(duì)每一列求眾數(shù)
print(df2.mode())
# 對(duì)某一列求眾數(shù)
print(df2['價(jià)格'].mode())

在這里插入圖片描述

1.2.7 cumsum 累計(jì)求和

df.cumsum() 對(duì)每一列累計(jì)求和
df['列名'].cumsum() 對(duì)某一列累計(jì)求和

# cumsum:累計(jì)求和
print(df2['看房人數(shù)'].cumsum())
# 累計(jì)比較最大值
df2['看房人數(shù)'].cummax()

在這里插入圖片描述

1.2.8 quantile函數(shù)計(jì)算分位數(shù)

  • 分位數(shù)(Quantile),亦稱(chēng)分位點(diǎn),常用的有中位數(shù)(即二分位數(shù))、四分位數(shù)、百分位數(shù)等;那什么是分位數(shù)呢?我們以中位數(shù)為例:通過(guò)把一堆數(shù)字按大小排序后找出正中間的一個(gè)數(shù)字作為中位數(shù),如果這一堆數(shù)字有偶數(shù)個(gè),則中位數(shù)不唯一,通常取最中間的兩個(gè)數(shù)值的平均數(shù)作為中位數(shù),即二分位數(shù)。
  • quantile函數(shù)默認(rèn)返回二分位數(shù);可以通過(guò)傳入?yún)?shù)來(lái)控制返回的四分位數(shù),或其他分位數(shù)

quantile(q=): 分位數(shù), 將列值排序后計(jì)算分位值
q: 設(shè)置分位點(diǎn) [0.25, 0.5, 0.75] [1/3, 2/3],不設(shè)置默認(rèn)是二位分

# quantile(q=): 分位數(shù), 將列值排序后計(jì)算分位值
# q: 設(shè)置分位點(diǎn) [0.25, 0.5, 0.75] [1/3, 2/3], 不設(shè)置默認(rèn)是二位分
print(df2['看房人數(shù)'].quantile())
# 查詢(xún)80%的看房人數(shù)信息
df2[df2['看房人數(shù)'] <= df2['看房人數(shù)'].quantile(q=0.8)]

在這里插入圖片描述

  • quantile(q=[]):設(shè)置分位點(diǎn)
# quantile(q=[]):設(shè)置分位點(diǎn)
df2['看房人數(shù)'].quantile(q=[0, 0.25, 0.5, 0.75, 1])

在這里插入圖片描述

1.2.9 describe() 統(tǒng)計(jì)描述

df.describe() 對(duì)每一列統(tǒng)計(jì)描述
df['列名'].describe() 對(duì)某一列統(tǒng)計(jì)描述

# describe(): 統(tǒng)計(jì)描述
df2['看房人數(shù)'].describe()

在這里插入圖片描述

1.2.10 corr 相關(guān)系數(shù)

corr(method=): 計(jì)算列之間的相關(guān)系數(shù)
method: 相關(guān)系數(shù)計(jì)算方式
查看列之間是否存在相關(guān)性 -> 面積和房?jī)r(jià)成正比 正比 反比
相關(guān)性值 -> [-1, 1] 值越大表示正相關(guān)越強(qiáng), 值越小表示負(fù)相關(guān)越強(qiáng)

print(df2.corr())
print(df.corr())  # 數(shù)量越多, 相關(guān)性可信度越強(qiáng)
df.corr(method='spearman')

在這里插入圖片描述

1.3 Pandas函數(shù)小結(jié)

  • 排序
    • nlargest函數(shù) 由大到小排序獲取指定數(shù)量的數(shù)據(jù)
    • nsmallest函數(shù) 由小到大排序獲取指定數(shù)量的數(shù)據(jù)
    • sort_values函數(shù) 按值排序
  • 聚合函數(shù)
    • corr函數(shù) 相關(guān)性計(jì)算
    • min函數(shù) 計(jì)算最小值
    • max函數(shù) 計(jì)算最大值
    • mean函數(shù) 計(jì)算平均值
    • std函數(shù) 計(jì)算標(biāo)準(zhǔn)偏差
    • quantile函數(shù) 計(jì)算分位數(shù)
    • sum函數(shù) 計(jì)算所有數(shù)值的和
    • count函數(shù) 計(jì)算非空數(shù)據(jù)的個(gè)數(shù)

2. Pandas 缺失值

好多數(shù)據(jù)集都含缺失數(shù)據(jù)。缺失數(shù)據(jù)有多種表現(xiàn)形式

  • 數(shù)據(jù)庫(kù)中,缺失數(shù)據(jù)表示為NULL
  • 在某些編程語(yǔ)言中用NANone表示
  • 缺失值也可能是空字符串''或數(shù)值 0
  • 在Pandas中使用NaN表示缺失值
    • Pandas中的NaN值來(lái)自NumPy庫(kù),NumPy中缺失值有幾種表示形式:NaN,NAN,nan,他們都一樣

2.1 Pandas缺失值的特點(diǎn)

  • 缺失值和其它類(lèi)型的數(shù)據(jù)不同,它毫無(wú)意義,NaN不等于0,也不等于空字符串
print(NaN==NaN)
print(NaN==NAN)
print(NaN==nan)

在這里插入圖片描述

print(nan==0)
print(nan=='')
print(nan==False)

在這里插入圖片描述

  • 缺失值從何而來(lái)呢?缺失值的來(lái)源有兩個(gè):
    • 原始數(shù)據(jù)包含缺失值
    • 數(shù)據(jù)整理過(guò)程中產(chǎn)生缺失值

2.2 加載包含缺失的數(shù)據(jù)

加載數(shù)據(jù)時(shí)可以通過(guò)keep_default_nana_values 指定加載數(shù)據(jù)時(shí)的缺失值

  • pd.read_csv(keep_default_na=, na_values=)
  • pd.read_excel(keep_default_na=, na_values=)

keep_default_na=: 是否將空值加載成缺失值, 默認(rèn)True
na_values: 指定哪些值在加載時(shí)轉(zhuǎn)換成缺失值, 接受列表類(lèi)型 0->NaN

讀取數(shù)據(jù), 不將空值加載成缺失值,直接顯示空白

# 讀取數(shù)據(jù), 不將空值加載成缺失值,直接顯示空白
df1 = pd.read_csv('../data/city_day.csv',keep_default_na=False)
df1.head(10)

在這里插入圖片描述
默認(rèn)是顯示NAN值的,也就是keep_default_na=True 為默認(rèn)
keep_default_na=False

在這里插入圖片描述

指定將哪些值轉(zhuǎn)換成缺失值

# 加載數(shù)據(jù)集時(shí), 指定將哪些值轉(zhuǎn)換成缺失值
# na_values=['數(shù)據(jù)值']
df3 = pd.read_csv('../data/city_day.csv',na_values=['Ahmedabad'],keep_default_na=False)
df3.head(10)

在這里插入圖片描述

2.3 查看缺失值

2.3.1 info查看缺失值個(gè)數(shù)

  • 查看有多少缺失值
  • df.info()
# 查看有多少個(gè)缺失值
# 沒(méi)處理的
print(df.info())# 處理了
df1.info()

在這里插入圖片描述

2.3.2 判斷數(shù)據(jù)值是否是缺失值

isnull()/isna(): 判斷數(shù)據(jù)值是否是缺失值,是缺失值返回True,不是返回False
notnull()/notna(): 判斷數(shù)據(jù)值是否不是缺失值,是缺失值返回False,不是返回True

  • 判斷全部數(shù)據(jù)值是否是缺失值,為true是缺失值
# 判斷全部數(shù)據(jù)值是否是缺失值
df.isnull()

  • 判斷某一列數(shù)據(jù)值是否是缺失值
# 判斷某一列數(shù)據(jù)值是否是缺失值
df['City'].isnull()

在這里插入圖片描述

  • 判斷全部數(shù)據(jù)值是否不是缺失值
# 判斷全部數(shù)據(jù)值是否不是缺失值
df.notnull()

在這里插入圖片描述

  • 判斷某一列數(shù)據(jù)值是否不是缺失值
# 判斷某一列數(shù)據(jù)值是否不是缺失值
df['City'].notnull()

在這里插入圖片描述

  • 使用isna 或者是 notna 判斷
# 判斷全部數(shù)據(jù)值是否是缺失值
df.isna()
# 判斷某一列數(shù)據(jù)值是否是缺失值
df['City'].isna()
# 判斷全部數(shù)據(jù)值是否不是缺失值
df.notna()
# 判斷某一列數(shù)據(jù)值是否不是缺失值
df['City'].notna()

在這里插入圖片描述

2.2.3 統(tǒng)計(jì)缺失值個(gè)數(shù)

df.isnull().sum() 是缺失值返回1,不是返回0

# 統(tǒng)計(jì)每一列缺失值個(gè)數(shù),是缺失值返回1,不是返回0
# true-》1 ,false-》0
df.isnull().sum()

在這里插入圖片描述

df.isnull().sum(axis=1) 統(tǒng)計(jì)每一行缺失值個(gè)數(shù),是缺失值返回1,不是返回0

# 統(tǒng)計(jì)每一行缺失值個(gè)數(shù),是缺失值返回1,不是返回0
df.isnull().sum(axis=1)

在這里插入圖片描述

notnull().sum() 統(tǒng)計(jì)每一列非缺失值個(gè)數(shù),是缺失值返回1,不是返回0
count 也是這個(gè)效果

在這里插入圖片描述

df.notnull().sum(axis=1) 統(tǒng)計(jì)每一行非缺失值個(gè)數(shù),是缺失值返回1,不是返回0
等價(jià)于 df.count(axis=1)

在這里插入圖片描述

2.4 Missingno庫(kù)對(duì)缺失值的情況進(jìn)行可視化探查

可以使用第三方庫(kù)Missingno來(lái)對(duì)缺失值進(jìn)行可視化

  • 通過(guò)pip安裝missingno

    pip install missingno -i https://pypi.tuna.tsinghua.edu.cn/simple/
    

在這里插入圖片描述

  • 導(dǎo)包
# 導(dǎo)包
import missingno as msno
import matplotlib.pyplot as plt

2.4.1 missingno.bar(df)缺失值數(shù)量可視化

利用missingno.bar(df)函數(shù)查看數(shù)據(jù)集數(shù)據(jù)完整性
msno.bar(df)

df=pd.read_csv('../data/city_day.csv')
# 繪制缺失值柱狀圖
msno.bar(df)
# 上面顯示的是非缺失值個(gè)數(shù)
# 區(qū)別在于是否有上面的一串?dāng)?shù)據(jù)
plt.show()

在這里插入圖片描述

2.4.2 missingno.matrix(df)缺失值位置的可視化

msno.matrix(df)

# 全部數(shù)據(jù)繪制缺失值位置
msno.matrix(df)

在這里插入圖片描述

隨機(jī)采樣1000條數(shù)據(jù),繪制缺失值位置

# 隨機(jī)采樣1000條數(shù)據(jù),繪制缺失值位置
msno.matrix(df.sample(1000))

在這里插入圖片描述

2.4.3 missingno.heatmap(df)缺失值之間相關(guān)性可視化

繪制缺失值之間相關(guān)性
msno.heatmap(df)

# 繪制缺失值之間相關(guān)性
print(msno.heatmap(df))
plt.show()

在這里插入圖片描述

3. 缺失值處理

缺失值的處理方法有以下幾種方式:

  • 刪除缺失值:刪除缺失值會(huì)損失信息,并不推薦刪除,當(dāng)缺失數(shù)據(jù)占比較高的時(shí)候,或可以忽略相關(guān)性時(shí),可以嘗試使用刪除缺失值
  • 填充缺失值:填充缺失值是指用一個(gè)估算的值來(lái)去替代缺失數(shù)
    • 平均值、中位數(shù)
    • 前后值填充,數(shù)據(jù)呈現(xiàn)順序變化的時(shí)候可以使用缺失值前邊或后邊的值進(jìn)行填充
  • 線(xiàn)性插值:假定數(shù)據(jù)點(diǎn)之間存在嚴(yán)格的線(xiàn)性關(guān)系,并利用相鄰數(shù)據(jù)點(diǎn)中的非缺失值來(lái)計(jì)算缺失數(shù)據(jù)點(diǎn)的值

3.1 dropna刪除缺失值

  • 刪除缺失值: 當(dāng)數(shù)據(jù)中缺失值占比很高時(shí), 可以選擇刪除; 刪除會(huì)導(dǎo)致丟失一些數(shù)據(jù), 影響分析
  • 通過(guò)drop()方法刪除已知占比比較高的行或列
  • df.dropna(how=, subset=, axis=, inplace=, thresh=)
    • axis=0
      • 可選參數(shù) ,默認(rèn)為0按行刪
      • 0, or ‘index’:刪除包含缺失值的行
      • 1, or ‘columns’:刪除包含缺失值的列
    • how='any'
      • 可選參數(shù),默認(rèn)為any
      • any: 如果存在NA值,則刪除該行或列
      • all: 如果所有值都是NA,則刪除該行或列
    • inplace=False
      • 可選參數(shù),不建議使用這個(gè)參數(shù)
      • 默認(rèn)False, 不對(duì)原數(shù)據(jù)集進(jìn)行修改
      • inplce=True,對(duì)原數(shù)據(jù)集進(jìn)行修改
    • subset接收一個(gè)列表
      • 接收一個(gè)列表,列表中的元素為列名: 對(duì)特定的列進(jìn)行缺失值刪除處理
    • thresh=n
      • 可選參數(shù)
      • 參數(shù)值為int類(lèi)型,按行/列去除NaN值,去除NaN值后該行/列剩余數(shù)值的數(shù)量(列數(shù))大于等于n,便保留這一行/列

加載數(shù)據(jù):

df=pd.read_csv('../data/city_day.csv')
  • 刪除列缺失值,只要有1個(gè)缺失值,就刪除整列數(shù)據(jù)
  • df.dropna(axis=1,inplace=False)
# 刪除列缺失值,只要有1個(gè)缺失值,就刪除整列數(shù)據(jù)
df.dropna(axis=1,inplace=False)

在這里插入圖片描述

  • 刪除行缺失值,只要有1個(gè)缺失值,就刪除整行數(shù)據(jù)
  • df.dropna(axis=0,inplace=False)
# 刪除行缺失值,只要有1個(gè)缺失值,就刪除整行數(shù)據(jù)
df.dropna(axis=0,inplace=False)

在這里插入圖片描述

  • 刪除所有值為缺失值的行數(shù)據(jù) // 刪除所有值為缺失值的列數(shù)據(jù)(一行或者一列全部為缺失值才會(huì)刪除
# 刪除所有值為缺失值的行數(shù)據(jù)
df.dropna(axis=0,how='all',inplace=False)
# 刪除所有值為缺失值的列數(shù)據(jù)
df.dropna(axis=1,how='all',inplace=False)

一行

  • 刪除指定列中缺失值
  • df.dropna(axis=0,subset=[‘列名’],inplace=False)
# 刪除指定列中缺失值
df.dropna(axis=0,subset=['PM2.5'],inplace=False)

在這里插入圖片描述

  • 刪除指定列中缺失值,這個(gè)列中有缺失值,就刪除這一行數(shù)據(jù)
# 刪除指定列中缺失值,這個(gè)列中有缺失值,就刪除這一行數(shù)據(jù)
df.dropna(axis=0,subset=['PM2.5','PM10'],inplace=False)

在這里插入圖片描述

  • 行數(shù)據(jù)中非缺失值個(gè)數(shù)大于等于thresh閾值就保留當(dāng)前行數(shù)據(jù)
 # 行數(shù)據(jù)中非缺失值個(gè)數(shù)大于等于thresh閾值就保留當(dāng)前行數(shù)據(jù)
(df.head(10).dropna(axis=0,thresh=11,inplace=False))

在這里插入圖片描述

3.2 填充缺失值

  • 填充缺失值: 使用均值/中位數(shù)/眾數(shù)等值替換缺失值 優(yōu)先考慮的處理缺失值方式
  • df/s.fillna(value=, inplace=, method=)
    • value: 需要填充的值 非時(shí)間序列的數(shù)據(jù)
    • method: ffill->取缺失值的前一個(gè)值進(jìn)行填充 bfiil->取缺失值的后一個(gè)值進(jìn)行填充 時(shí)間序列的數(shù)據(jù)

3.2.1 常數(shù)值填充

填充全部缺失值
df.fillna(value=常數(shù))

# 常數(shù)值填充缺失值 - -全部缺失值
df.fillna(value=9999)

在這里插入圖片描述

指定列填充缺失值
df【‘列名’】.fillna(value=常數(shù))

# 指定列填充缺失值
df['PM2.5'].fillna(value=9999)
# 指定列填充缺失值,以該列的均值填充
df['PM2.5'].fillna(value=df['PM2.5'].mean())

在這里插入圖片描述

選擇數(shù)據(jù)填充缺失值

# 選擇數(shù)據(jù)填充缺失值
df['Xylene'][54:64].fillna(value=9999)

在這里插入圖片描述

3.2.2 fillna前后值填充缺失值

時(shí)序數(shù)據(jù)在某一列值的變化往往有一定線(xiàn)性規(guī)律,絕大多數(shù)的時(shí)序數(shù)據(jù),具體的列值隨著時(shí)間的變化而變化,所以對(duì)于有時(shí)序的行數(shù)據(jù)缺失值處理可以使用上一個(gè)非空值或下一個(gè)非空值填充

  • 使用上一個(gè)非空值(參數(shù)method=‘ffill’)填充空值
# 使用缺失值上一個(gè)非缺失值填充
df['Xylene'][54:64].fillna(method='ffill')

在這里插入圖片描述

  • 使用缺失值下一個(gè)非缺失值填充
# 使用缺失值下一個(gè)非缺失值填充
df['Xylene'][54:64].fillna(method='bfill')

在這里插入圖片描述

3.2.3 interpolate線(xiàn)性插值

絕大多數(shù)的時(shí)序數(shù)據(jù),具體的列值隨著時(shí)間的變化而變化。 因此,除了使用bfill和ffill進(jìn)行插補(bǔ)以外還可以使用線(xiàn)性插值法:它假定數(shù)據(jù)點(diǎn)之間存在嚴(yán)格的線(xiàn)性關(guān)系,并利用相鄰數(shù)據(jù)點(diǎn)中的非缺失值來(lái)計(jì)算缺失數(shù)據(jù)點(diǎn)的值。

線(xiàn)性差值方式填充缺失值 時(shí)間序列的數(shù)據(jù) 了解
線(xiàn)性插值: 將缺失值前后的數(shù)據(jù)組合成線(xiàn)性關(guān)系, 根據(jù)線(xiàn)性計(jì)算推測(cè)出缺失位置的實(shí)際值

使用df.interpolate(limit_direction="both") 對(duì)缺失數(shù)據(jù)進(jìn)行線(xiàn)性填充

# 線(xiàn)性插值方式填充缺失值
df['Xylene'][54:64].interpolate(method='linear')

在這里插入圖片描述

3.3 缺失值處理小結(jié)

  • 缺失值會(huì)影響分析計(jì)算的結(jié)果,這個(gè)結(jié)果又要用來(lái)指導(dǎo)生產(chǎn)經(jīng)營(yíng),所以要重視缺失值

  • 空值僅指Pandas中的空值類(lèi)型,比如NaN

  • 缺失值包含空值,也有可能是空字符串、數(shù)字0、False或None等

  • 不是空值的缺失值可以通過(guò)replace函數(shù)先替換為NaN空值,之后再按空值進(jìn)行處
    理解上面的內(nèi)容,并請(qǐng)對(duì)下面的API 有印象、能找到、能理解、能看懂

  • 查看空值

    • df.info() 可以查看數(shù)據(jù)集每一列非空值的數(shù)量
    • isnull & notnull函數(shù) 判斷是否存在空值
    • df.isnull().sum() 統(tǒng)計(jì)空值數(shù)量
    • missingno庫(kù)可以對(duì)空值進(jìn)行可視化探查
      • missingno.matrix(df) 查看缺失值的位置
      • missingno.heatmap(df) 查看缺失值之間的相關(guān)性
  • 缺失值的處理

    • df.dropna() 刪除缺失值
    • df.fillna(具體值) 將缺失值填充為具體指
    • df.fillna(method='ffill') 使用上一個(gè)非空值進(jìn)行填充
    • df.fillna(method='bfill') 使用下一個(gè)非空值進(jìn)行填充
    • df.interpolate() 線(xiàn)性插值:假定數(shù)據(jù)點(diǎn)之間存在嚴(yán)格的線(xiàn)性關(guān)系,并利用相鄰數(shù)據(jù)點(diǎn)中的非缺失值來(lái)計(jì)算缺失數(shù)據(jù)點(diǎn)的值

4. Pandas數(shù)據(jù)類(lèi)型

4.1 Pandas 的數(shù)據(jù)結(jié)構(gòu)

Pandas 支持多種數(shù)據(jù)類(lèi)型,這使得它能夠靈活地處理各種數(shù)據(jù)結(jié)構(gòu)。以下是 Pandas 中主要的數(shù)據(jù)類(lèi)型:

數(shù)據(jù)結(jié)構(gòu)

  1. Series: 一維數(shù)組,可以保存任何數(shù)據(jù)類(lèi)型(整數(shù)、字符串、浮點(diǎn)數(shù)等),并且有一個(gè)與之相關(guān)的索引。
  2. DataFrame: 二維表格型數(shù)據(jù)結(jié)構(gòu),可以存儲(chǔ)不同類(lèi)型的數(shù)據(jù)(每列可以有不同的數(shù)據(jù)類(lèi)型)。它類(lèi)似于 SQL 表格或者 Excel 工作表。

內(nèi)置數(shù)據(jù)類(lèi)型

Pandas 中的數(shù)據(jù)類(lèi)型主要基于 NumPy 的數(shù)據(jù)類(lèi)型。以下是 Pandas 中常見(jiàn)的數(shù)據(jù)類(lèi)型:

  1. 整數(shù)類(lèi)型

    • int8: 8 位有符號(hào)整數(shù)。
    • int16: 16 位有符號(hào)整數(shù)。
    • int32: 32 位有符號(hào)整數(shù)。
    • int64: 64 位有符號(hào)整數(shù)。
    • 類(lèi)似的,還有無(wú)符號(hào)整數(shù)類(lèi)型 uint8, uint16, uint32, uint64。
  2. 浮點(diǎn)數(shù)類(lèi)型

    • float16: 半精度浮點(diǎn)數(shù)。
    • float32: 單精度浮點(diǎn)數(shù)。
    • float64: 雙精度浮點(diǎn)數(shù)。
  3. 布爾類(lèi)型

    • bool: 布爾值類(lèi)型。
  4. 對(duì)象類(lèi)型

    • object: 通常用于字符串或其他不能用上述類(lèi)型表示的對(duì)象。
  5. 特殊數(shù)據(jù)類(lèi)型

    • datetime64: 日期時(shí)間類(lèi)型,支持多種日期時(shí)間格式。
    • timedelta64: 時(shí)間間隔類(lèi)型,用于表示兩個(gè)日期時(shí)間之間的差異。
    • category: 分類(lèi)類(lèi)型,用于分類(lèi)變量。

查看和修改數(shù)據(jù)類(lèi)型

  • 查看數(shù)據(jù)類(lèi)型

    • 使用 .dtypes 屬性來(lái)查看 DataFrame 中各列的數(shù)據(jù)類(lèi)型。
  • 修改數(shù)據(jù)類(lèi)型

    • 使用 .astype() 方法來(lái)改變數(shù)據(jù)類(lèi)型。
Pandas數(shù)據(jù)類(lèi)型Python類(lèi)型說(shuō)明
objectstr字符串
int64int整數(shù)
float64float浮點(diǎn)數(shù)
boolbool布爾值
category無(wú)原生類(lèi)型分類(lèi)類(lèi)型
datetime無(wú)原生類(lèi)型時(shí)間日期類(lèi)型
timedelta無(wú)原生類(lèi)型時(shí)間差類(lèi)型

4.2 查看數(shù)據(jù)類(lèi)型

字符串object 、整數(shù)int、小數(shù)float 以及 布爾值bool類(lèi)型都是比較常見(jiàn)的一般類(lèi)型

加載數(shù)據(jù):

df = pd.read_csv('../data/city_day.csv')
  • 查看每一列數(shù)據(jù)類(lèi)型
# 查看每一列數(shù)據(jù)類(lèi)型
df.info()
df.dtypes

在這里插入圖片描述

4.3 數(shù)據(jù)類(lèi)型轉(zhuǎn)換

通過(guò) astype() 或 to_numeric() 實(shí)現(xiàn)類(lèi)型轉(zhuǎn)換
s.astype(dtype=類(lèi)型名)

df.astype(dtype={列名:類(lèi)型名, 列名:類(lèi)型名, ...})

4.3.1 seriers.astype函數(shù)轉(zhuǎn)換數(shù)據(jù)類(lèi)型

  • 將一列轉(zhuǎn)換為object類(lèi)型

object 和 str 都是字符串類(lèi)型,因此使用哪一個(gè)都可以

# 類(lèi)型轉(zhuǎn)換
# 將一列轉(zhuǎn)換為object類(lèi)型
df['PM2.5'] = df['PM2.5'].astype(dtype = object)
df['PM2.5'] = df['PM2.5'].astype(dtype = str)
df.info()

在這里插入圖片描述

  • 多列轉(zhuǎn)換為object類(lèi)型

多個(gè)列的時(shí)候需要使用字典進(jìn)行類(lèi)型的轉(zhuǎn)換

# 多列轉(zhuǎn)換為object類(lèi)型df.astype(dtype = {'PM2.5':object, 'PM10':object, 'SO2':object, 'NO2':object, 'CO':object, 'O3':object}).info()

在這里插入圖片描述

  • 將所有列轉(zhuǎn)換為object類(lèi)型

不指定任何列,就是全部列都進(jìn)行轉(zhuǎn)換

# 將所有列轉(zhuǎn)換為object類(lèi)型
df.astype(dtype=object).info()

注意:需要將有意義的列進(jìn)行類(lèi)型轉(zhuǎn)換
astype函數(shù)要求DataFrame列的數(shù)據(jù)類(lèi)型必須相同,當(dāng)有些數(shù)據(jù)中有缺失,但不是NaN時(shí)(如’missing’,'null’等),會(huì)使整列數(shù)據(jù)變成字符串類(lèi)型而不是數(shù)值型,這個(gè)時(shí)候就會(huì)報(bào)錯(cuò)

# 注意點(diǎn): 需要將有意義的列進(jìn)行類(lèi)型轉(zhuǎn)換
df2 = df.head().copy()
df2.loc[::2, 'NO'] = 'missing'
print(df2)
df2.info()
# df2['NO'].astype(dtype=float)  # 報(bào)錯(cuò)

此時(shí)運(yùn)行下面的代碼會(huì)報(bào)錯(cuò)ValueError: could not convert string to float: 'missing',無(wú)法使用astype函數(shù)進(jìn)行類(lèi)型轉(zhuǎn)換;這個(gè)時(shí)候我們可以使用to_numeric函數(shù)
print(df2[‘NO’].astype(float))

4.3.2 pd.to_numeric函數(shù)字符串轉(zhuǎn)數(shù)字類(lèi)型

astype函數(shù)要求DataFrame列的數(shù)據(jù)類(lèi)型必須相同,當(dāng)有些數(shù)據(jù)中有缺失,但不是NaN時(shí)(如’missing’,'null’等),會(huì)使整列數(shù)據(jù)變成字符串類(lèi)型而不是數(shù)值型,這個(gè)時(shí)候可以使用to_numeric處理

  • pd.to_numeric函數(shù)的參數(shù)errors, 它決定了當(dāng)該函數(shù)遇到無(wú)法轉(zhuǎn)換的數(shù)值時(shí)該如何處理
    • 默認(rèn)情況下,該值為raise,如果to_numeric遇到無(wú)法轉(zhuǎn)換的值時(shí),會(huì)拋出異常
    • coerce: 如果to_numeric遇到無(wú)法轉(zhuǎn)換的值時(shí),會(huì)返回NaN值
    • ignore: 如果to_numeric遇到無(wú)法轉(zhuǎn)換的值時(shí)會(huì)放棄轉(zhuǎn)換,什么都不做
pd.to_numeric(df2['NO'], errors='coerce')

在這里插入圖片描述

df2['NO'] = pd.to_numeric(df2['NO'], errors='coerce')
df2.info()

在這里插入圖片描述

4.4 category 分類(lèi)類(lèi)型

  • category類(lèi)型是比較特殊的數(shù)據(jù)類(lèi)型,是由固定的且有限數(shù)量的變量組成的,比如性別,分為男、女、保密;轉(zhuǎn)換方法可以使用astype函數(shù)
  • category類(lèi)型的數(shù)據(jù)中的分類(lèi)是有順序的
  • category類(lèi)型在內(nèi)存中使用的空間比字符串或其他數(shù)據(jù)類(lèi)型更小。這對(duì)于數(shù)據(jù)集中有限且重復(fù)的值非常有用

4.4.1 創(chuàng)建 category 分類(lèi)類(lèi)型

  • 方式一
# 創(chuàng)建分類(lèi)類(lèi)型數(shù)據(jù)
# 指定的分類(lèi)類(lèi)別為12345, 數(shù)據(jù)就對(duì)應(yīng)這5類(lèi), 不屬于指定分類(lèi)類(lèi)別的用NaN替換
s1= pd.Series(data=pd.Categorical(values = [1,2,3,4,5,6,7,8,9,10], categories=[1,2,3,4,5]))
s1

在這里插入圖片描述

  • 方式二
s2 = pd.Series(data=[1,5,6,7,8,1,5,6],dtype='category')
print(s2)
print(type(s2))

在這里插入圖片描述

4.4.2 category 分類(lèi)類(lèi)型轉(zhuǎn)換

通過(guò)astype方法轉(zhuǎn)換成category類(lèi)型

#通過(guò)astype方法轉(zhuǎn)換成category類(lèi)型
df['City'] = df['City'].astype(dtype='category')
df.info()

在這里插入圖片描述

4.5 datetime時(shí)間類(lèi)型

python沒(méi)有原生的datetime數(shù)據(jù)類(lèi)型,需要使用datetime包

from datetime import datetime
now = datetime.now()
someday = datetime(2020, 1, 1)
print(now)
print(type(now))
print(someday)
print(type(someday))

在這里插入圖片描述

4.5.1 查看數(shù)據(jù)時(shí)間

# python中的日期時(shí)間
# 需要借助datetime模塊進(jìn)行處理
from datetime import datetime
# 獲取當(dāng)前時(shí)間
datetime.now()
# 獲取當(dāng)前類(lèi)型
print(type(datetime.now()))
# 獲取當(dāng)前日期和時(shí)間
print(datetime.now())
# 獲取當(dāng)前日期
print(datetime.now().date())
# 獲取當(dāng)前年份
print(datetime.now().year)
# 獲取當(dāng)前時(shí)間
print(datetime.now().time())
# 獲取當(dāng)前月份
print(datetime.now().month)

在這里插入圖片描述

4.5.2 創(chuàng)建日期時(shí)間

datetime(年,月,日,小時(shí),分鐘,秒)

# 創(chuàng)建日期時(shí)間
someday = datetime(2024,8,10)
print(someday)
print(type(someday))

在這里插入圖片描述

4.5.3 時(shí)間戳

datetime.now().timestamp()

# 時(shí)間戳
print(datetime.now().timestamp())
# 或者now()也可以查看
datetime.now()

在這里插入圖片描述

4.5.4 時(shí)間函數(shù)格式化

strftime() -> f:format 日期時(shí)間格式化后轉(zhuǎn)換成字符串類(lèi)型
strptime() -> p:parse 字符串類(lèi)型的日期時(shí)間解析成日期時(shí)間類(lèi)型
datetime.now().strftime(格式)
datetime.strptime(s1, 格式)

# strftime() -> f:format 日期時(shí)間格式化后轉(zhuǎn)換成字符串類(lèi)型
print(datetime.now().strftime(format='%Y-%m-%d %H:%M:%S'))
# # strptime() -> p:parse 字符串類(lèi)型的日期時(shí)間解析成日期時(shí)間類(lèi)型
# '%Y-%m-%d %H:%M'->字符串是什么日期時(shí)間格式就寫(xiě)什么格式, 格式不一致會(huì)發(fā)生報(bào)錯(cuò)!!!
s1= datetime.now().strftime(format='%Y-%m-%d %H:%M:%S')
s2 =datetime.strptime(s1, '%Y-%m-%d %H:%M:%S')
print(s2)
print(type(s2))

在這里插入圖片描述

4.5.5 日期類(lèi)型的轉(zhuǎn)換

加載數(shù)據(jù)集時(shí)轉(zhuǎn)換成日期類(lèi)型
pd.read_csv(parse_dates=[列名1, 列名2, …])
pd.read_excel(parse_dates=[列名1, 列名2, …])
df = pd.read_csv(‘data/city_day.csv’, parse_dates=[‘Date’])

  • 加載數(shù)據(jù)集時(shí)轉(zhuǎn)換成日期類(lèi)型

可以通過(guò)列名 或者是 列下標(biāo)

# 加載數(shù)據(jù)集時(shí)轉(zhuǎn)換成日期類(lèi)型,通過(guò)列名轉(zhuǎn)換
df = pd.read_csv('../data/city_day.csv', parse_dates=['Date'])
df.info()
# 通過(guò)下標(biāo)進(jìn)行轉(zhuǎn)換
df1 = pd.read_csv('../data/city_day.csv', parse_dates=[1])
df1.info()

在這里插入圖片描述

  • 通過(guò) astype(dtype=日期類(lèi)型) 將一列轉(zhuǎn)化為時(shí)間類(lèi)型
  • 通過(guò) pd.to_datetime(df[‘列名’])字符串轉(zhuǎn)換為時(shí)間日期類(lèi)型
# astype(dtype=日期類(lèi)型)
df = pd.read_csv('../data/city_day.csv')
df['Date'] = df['Date'].astype(dtype='datetime64[ns]')
df.info()

在這里插入圖片描述

# pd.to_datetime(列名,unit )
df = pd.read_csv('../data/city_day.csv')
df['Date'] = pd.to_datetime(df['Date'])
df.info()

在這里插入圖片描述

4.6 提取日期類(lèi)型的部分時(shí)間

在 Pandas 中,如果有一個(gè)包含日期時(shí)間的 Series 或 DataFrame 列,您可以輕松地提取日期時(shí)間的不同部分。

通過(guò)使用.dt 屬性訪(fǎng)問(wèn)日期時(shí)間組件來(lái)實(shí)現(xiàn)。

常用的日期時(shí)間組件

  1. Year: 年份
  2. Month: 月份
  3. Day: 日
  4. Hour: 小時(shí)
  5. Minute: 分鐘
  6. Second: 秒
  7. Week: 星期
  8. Day of Week: 星期幾(0-6,其中 0 代表周一)
  9. Quarter: 季度
  10. Timestamp: 完整的時(shí)間戳

注意事項(xiàng)

  • 確保您的日期時(shí)間數(shù)據(jù)已經(jīng)正確轉(zhuǎn)換為 datetime64 類(lèi)型。
  • 如果日期時(shí)間數(shù)據(jù)包含時(shí)區(qū)信息,可以使用 .dt.tz_localize().dt.tz_convert() 來(lái)處理時(shí)區(qū)轉(zhuǎn)換。
# 提取日期類(lèi)型中的部分時(shí)間
# 獲取日期類(lèi)型的s對(duì)象的部分時(shí)間
# 列名.dt.year 年
# 列名.dt.month 月
# 打印數(shù)據(jù)中的年份
print(df['Date'].dt.year.head())
# 打印數(shù)據(jù)中的月份
print(df['Date'].dt.month.head())
# 打印數(shù)據(jù)中的日期
print(df['Date'].dt.day.head())
# 打印數(shù)據(jù)中的小時(shí)
print(df['Date'].dt.hour.head())
# 打印數(shù)據(jù)中的季度
print(df['Date'].dt.quarter.head())
# 打印數(shù)據(jù)中的周數(shù)
print(df['Date'].dt.week.head())
# 打印數(shù)據(jù)中的工作日
print(df['Date'].dt.weekday.head())
# 打印數(shù)據(jù)中的年內(nèi)天數(shù)
print(df['Date'].dt.dayofyear.head())
# 打印數(shù)據(jù)中的是否為閏年
print(df['Date'].dt.is_leap_year.head())
# 打印數(shù)據(jù)中的是否為月初
print(df['Date'].dt.is_month_start.head())
# 打印數(shù)據(jù)中的是否為月末
print(df['Date'].dt.is_month_end.head())
# 打印數(shù)據(jù)中的是否為季度初
print(df['Date'].dt.is_quarter_start.head())
# 打印數(shù)據(jù)中的是否為季度末
print(df['Date'].dt.is_quarter_end.head())
# 打印數(shù)據(jù)中的是否為年初
print(df['Date'].dt.is_year_start.head())
# 打印數(shù)據(jù)中的是否為年末
print(df['Date'].dt.is_year_end.head())

在這里插入圖片描述

  • python中提取一個(gè)時(shí)間值中的部分時(shí)間 變量名.year
# python中提取一個(gè)時(shí)間值中的部分時(shí)間 變量名.year
someday = datetime(2024, 6, 17)
print(someday)
print(someday.year)

在這里插入圖片描述

4.7 日期類(lèi)型運(yùn)算

可以通過(guò)S對(duì)象的內(nèi)置函數(shù)獲取數(shù)據(jù)
df['列名'].min()
df['列名'].max()

# 日期運(yùn)算, 獲取日期類(lèi)型中的最小值和最大值 
print(df['Date'].min())
print(df['Date'].max())
# 獲取日期類(lèi)型中的差值
print(df['Date'].max() - df['Date'].min())

在這里插入圖片描述

4.8 日期類(lèi)型列作為索引

4.8.1 df.set_index(keys=‘列名’) 設(shè)置索引

df.set_index(keys='列名')

temp_df = df.set_index(keys='Date')
temp_df.head()

在這里插入圖片描述

查看索引

temp_df.index

在這里插入圖片描述

4.8.2 加載數(shù)據(jù)的時(shí)候指定索引

pd.read_csv(路徑,index_col='列名',parse_dates=True)

# index_col: 指定列為索引
# parse_dates: True->將索引轉(zhuǎn)換成日期類(lèi)型
df1 = pd.read_csv('../data/city_day.csv',index_col='Date',parse_dates=True)
df1.index

在這里插入圖片描述

4.8.3 日期類(lèi)型索引獲取部分?jǐn)?shù)據(jù)

# 日期類(lèi)型索引可以獲取部分?jǐn)?shù)據(jù)
# 先要對(duì)日期類(lèi)型索引進(jìn)行排序
df1.sort_index(inplace=True)
# 獲取2015年8月的數(shù)據(jù)子集
print(df1.loc['2015-08'])
# 獲取2015年的數(shù)據(jù)子集
print(df1.loc['2015'])
# 獲取時(shí)間范圍內(nèi)的數(shù)據(jù)子集
print(df1.loc['2015-01-01 22':'2015-05-05 10:22:33'])

在這里插入圖片描述

5. timedelta時(shí)間差類(lèi)型

5.1 timedelta時(shí)間差類(lèi)型 介紹

在 Pandas 中,Timedelta 類(lèi)型用于表示兩個(gè)日期時(shí)間之間的差值。這種類(lèi)型非常有用,尤其是在處理時(shí)間序列數(shù)據(jù)時(shí)。下面是一些關(guān)于 Timedelta 類(lèi)型的基礎(chǔ)知識(shí)和示例。

  • 創(chuàng)建 Timedelta 對(duì)象
    可以使用 pd.Timedelta 或者字符串來(lái)創(chuàng)建 Timedelta 對(duì)象。

使用 pd.Timedelta 創(chuàng)建

import pandas as pd# 創(chuàng)建 Timedelta 對(duì)象
td1 = pd.Timedelta(days=10, hours=2, minutes=30)
print(td1)

使用字符串創(chuàng)建

# 使用字符串創(chuàng)建 Timedelta 對(duì)象
td2 = pd.Timedelta('1 days 2 hours 30 minutes')
print(td2)

Timedelta 屬性
Timedelta 對(duì)象有一些有用的屬性來(lái)獲取時(shí)間差的具體組成部分。

  • 屬性示例
# 獲取 Timedelta 的屬性
print(td1.days)  # 天數(shù)
print(td1.seconds)  # 秒數(shù)
print(td1.microseconds)  # 微秒數(shù)
print(td1.components)  # 各個(gè)時(shí)間單位的組成部分
  • 運(yùn)算操作
    Timedelta 對(duì)象可以與其他 Timedelta 對(duì)象或日期時(shí)間對(duì)象進(jìn)行運(yùn)算。

  • 加法和減法

# 創(chuàng)建另一個(gè) Timedelta 對(duì)象
td3 = pd.Timedelta('2 days 1 hour')# 加法
result_add = td1 + td3
print(result_add)# 減法
result_subtract = td1 - td3
print(result_subtract)
  • 與日期時(shí)間的運(yùn)算
# 創(chuàng)建日期時(shí)間對(duì)象
dt = pd.Timestamp('2024-01-01')# 加法
result_add_dt = dt + td1
print(result_add_dt)# 減法
result_subtract_dt = dt - td1
print(result_subtract_dt)
  • 比較運(yùn)算
    可以使用比較運(yùn)算符來(lái)比較 Timedelta 對(duì)象。
# 比較運(yùn)算
print(td1 > td3)  # 大于
print(td1 < td3)  # 小于
print(td1 == td3)  # 等于

5.2 時(shí)間差類(lèi)型運(yùn)算

# 獲取當(dāng)前時(shí)間與任意一個(gè)之間的時(shí)間差
print(datetime.now()-datetime(2020, 8, 10))
print(type(datetime.now()-datetime(2020, 8, 10)))

在這里插入圖片描述

  • pandas 時(shí)間差類(lèi)型
# pandas 時(shí)間差類(lèi)型
df2 = pd.read_csv('../data/city_day.csv',parse_dates=['Date'])
df2['ref_date']  = datetime.now() - df2['Date']
df2.head()

在這里插入圖片描述

  • 獲取時(shí)間差類(lèi)型中的整數(shù)部分
# 獲取時(shí)間差類(lèi)型中的整數(shù)部分
df2['ref_date'].dt.days

在這里插入圖片描述

5.3 pd.to_timedelta函數(shù)轉(zhuǎn)換timedelta類(lèi)型

可以使用astype 也可以使用 to_timedelta 將字符串?dāng)?shù)據(jù)轉(zhuǎn)換為時(shí)間數(shù)據(jù)

# 字符串類(lèi)型轉(zhuǎn)換成時(shí)間差類(lèi)型
print(df2['ref_date'].astype(dtype='timedelta64[ns]'))
pd.to_timedelta(df2['ref_date'])

在這里插入圖片描述

5.4 timedelta類(lèi)型數(shù)據(jù)作為df索引

將timedelta類(lèi)型數(shù)據(jù)作為df索引,就可以基于時(shí)間差范圍來(lái)選擇數(shù)據(jù)(將時(shí)間差列設(shè)置為索引, 獲取數(shù)據(jù)子集

修改數(shù)據(jù)將時(shí)間差列作為索引

# 將時(shí)間差列設(shè)置為索引, 獲取數(shù)據(jù)子集
df2['ref_date']= df2['ref_date'].dt.days
df2.set_index(keys='ref_date', inplace=True)
df2

在這里插入圖片描述
索引排序,不排序會(huì)發(fā)生報(bào)錯(cuò)

通過(guò)**df2.loc['索引值1' : '索引值2']**,來(lái)獲取部分?jǐn)?shù)據(jù),拿到索引值1 到 索引值2 之間的數(shù)據(jù)

# 索引排序,不排序會(huì)發(fā)生報(bào)錯(cuò)
df2.sort_index(inplace=True)
df2.loc['3506']
df2.loc['3500' : '3509']

在這里插入圖片描述

6. Pandas 數(shù)據(jù)類(lèi)型的小結(jié)

6.1 Pandas中的數(shù)據(jù)類(lèi)型

Pandas數(shù)據(jù)類(lèi)型Python類(lèi)型說(shuō)明
objectstr字符串
int64int整數(shù)
float64float浮點(diǎn)數(shù)
boolbool布爾值
category無(wú)原生類(lèi)型分類(lèi)類(lèi)型
datetime無(wú)原生類(lèi)型時(shí)間日期類(lèi)型
timedelta無(wú)原生類(lèi)型時(shí)間差類(lèi)型

6.2 Pandas中數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)類(lèi)型的關(guān)系

  • pandas是基于numpy構(gòu)建的包,所以pandas中的數(shù)據(jù)類(lèi)型都是基于Numpy中的ndarray類(lèi)型實(shí)現(xiàn)的
  • Pandas中的數(shù)據(jù)結(jié)構(gòu)對(duì)象和數(shù)據(jù)類(lèi)型對(duì)象:
    • dataframe 表 【數(shù)據(jù)結(jié)構(gòu)】
      • series 列【數(shù)據(jù)結(jié)構(gòu)】
        • object --> python str 字符串 【數(shù)據(jù)類(lèi)型】
        • int64 --> python int 整數(shù) 【數(shù)據(jù)類(lèi)型】
        • float64 --> python float 小數(shù) 【數(shù)據(jù)類(lèi)型】
        • bool --> python bool True False 【數(shù)據(jù)類(lèi)型】
        • datetime64 --> python datetime 時(shí)間日期 【數(shù)據(jù)類(lèi)型】
  • timedelta[ns]–> 兩個(gè)時(shí)間點(diǎn)之間相距的時(shí)間差,單位是納秒 【數(shù)據(jù)類(lèi)型】
  • category --> 特定分類(lèi)數(shù)據(jù)類(lèi)型,比如性別分為男、女、其他 【數(shù)據(jù)類(lèi)型】

6.3 Pandas數(shù)據(jù)類(lèi)型轉(zhuǎn)換基本方法

  • df['列名'].astype(str)
  • 當(dāng)Seriers對(duì)象使用astype函數(shù)轉(zhuǎn)換的結(jié)果中數(shù)據(jù)類(lèi)型不同時(shí),使用to_numeric函數(shù)
    • pd.to_numeric(df['列名'], errors='coerce')無(wú)法轉(zhuǎn)換的值返回NaN
    • pd.to_numeric(df['列名'], errors='ignore') 無(wú)法轉(zhuǎn)換的值返回原值

6.4 category分類(lèi)類(lèi)型

  • 創(chuàng)建方式s = pd.Series(['B','D','C','A'], dtype='category')

6.5 datetime時(shí)間類(lèi)型

  • datetime時(shí)間類(lèi)型的Seriers來(lái)源兩種方式:
    • 讀取時(shí)指定 df = pd.read_csv('..xxx.csv', parse_dates=[1])
    • 轉(zhuǎn)換 df['Date'] = pd.to_datetime(df['Date'])
  • 提取datetime時(shí)間類(lèi)型的Seriers中的具體年月日時(shí)分秒星期
    • df['Date'].dt.year
    • df['Date'].dt.quarter # 季度
    • df['Date'].dt.dayofweek + 1 # 星期
  • 提取datetime時(shí)間類(lèi)型的Seriers中的某一個(gè)值的具體年月日時(shí)分秒星期
    • df4['Date'][0].dayofweek+1 # 星期
  • datetime時(shí)間類(lèi)型的Seriers可以進(jìn)行時(shí)間計(jì)算
    • 直接調(diào)用聚合函數(shù) df['Date'].max() # 最近的日期
    • 計(jì)算時(shí)間差 df['Date'] - df['Date'].min() # 返回時(shí)間差類(lèi)型數(shù)據(jù)構(gòu)成的Seriers
  • datetime時(shí)間類(lèi)型的S對(duì)象作為索引的兩種方式
    • df = pd.read_csv('..xxx.csv', index_col='Date', parse_dates=True)
    • df.index = df['date']
    • 注意:要對(duì)索引進(jìn)行重新排序 必要步驟 df = df.sort_index()
  • datetime時(shí)間類(lèi)型索引可以按照時(shí)間范圍取子集
    • df['2018']
    • df['2016-06']
    • df.loc['2015-3-4 22': '2016-1-1 23:45:00']

6.6 timedelta時(shí)間差類(lèi)型

  • timedelta時(shí)間差類(lèi)型的創(chuàng)建:
    • df['date_diff'] = df['Date'] - df['Date'].min()
  • 字符串類(lèi)型轉(zhuǎn)換為時(shí)間差類(lèi)型
    • s2 = pd.to_timedelta(s1)
  • timedelta時(shí)間差類(lèi)型設(shè)為索引
    • df.index = df['Date'] - df['Date'].min()
  • 基于時(shí)間差范圍來(lái)選擇數(shù)據(jù)
    • df['0 days':'4 days']
http://www.risenshineclean.com/news/48857.html

相關(guān)文章:

  • 好看的網(wǎng)站模板2022當(dāng)下社會(huì)熱點(diǎn)話(huà)題
  • 深圳市光明區(qū)住房和建設(shè)局網(wǎng)站網(wǎng)店seo關(guān)鍵詞
  • 百度推廣網(wǎng)站誰(shuí)做百度競(jìng)價(jià)價(jià)格
  • 油漆網(wǎng)站mobanseo整站優(yōu)化方案案例
  • 企業(yè)建站技術(shù)軟文營(yíng)銷(xiāo)名詞解釋
  • 辦網(wǎng)站租服務(wù)器東莞優(yōu)化排名公司
  • 哪個(gè)網(wǎng)站可以做身份核驗(yàn)大地資源網(wǎng)在線(xiàn)觀(guān)看免費(fèi)
  • 企業(yè)做網(wǎng)站建設(shè)百度一下瀏覽器
  • icp網(wǎng)站建設(shè)seo手機(jī)搜索快速排名
  • W做網(wǎng)站怎么建立自己的企業(yè)網(wǎng)站
  • 做的網(wǎng)站怎么放到域名模板網(wǎng)站如何建站
  • 購(gòu)物商城網(wǎng)站建設(shè)電商網(wǎng)站建設(shè)開(kāi)發(fā)
  • 黑龍江省建設(shè)造價(jià)協(xié)會(huì)網(wǎng)站在線(xiàn)網(wǎng)站seo診斷
  • 什么網(wǎng)站發(fā)布找做效果圖的電腦優(yōu)化是什么意思
  • wordpress的文件結(jié)構(gòu)百度刷seo關(guān)鍵詞排名
  • 網(wǎng)站建設(shè)行業(yè)數(shù)據(jù)seo推薦
  • 商洛免費(fèi)做網(wǎng)站百度廣告聯(lián)系方式
  • 豐金網(wǎng)絡(luò) 做網(wǎng)站數(shù)字營(yíng)銷(xiāo)網(wǎng)站
  • 怎么做培訓(xùn)班網(wǎng)站石家莊關(guān)鍵詞優(yōu)化軟件
  • 什么是網(wǎng)絡(luò)營(yíng)銷(xiāo)包含哪些內(nèi)容全網(wǎng)營(yíng)銷(xiāo)與seo
  • 清理網(wǎng)站數(shù)據(jù)庫(kù)源碼交易平臺(tái)
  • 南昌那個(gè)公司做網(wǎng)站好今日最新國(guó)際新聞?lì)^條
  • 金昌網(wǎng)站seo合肥seo推廣培訓(xùn)班
  • 蘇州專(zhuān)業(yè)做網(wǎng)站公司有哪些小說(shuō)推廣關(guān)鍵詞怎么弄
  • 做網(wǎng)站需要的照片網(wǎng)站建設(shè)公司哪個(gè)好呀
  • 建站公司 萬(wàn)維科技外鏈交換平臺(tái)
  • 網(wǎng)站設(shè)置密碼百度網(wǎng)站域名注冊(cè)
  • 給企業(yè)做宣傳網(wǎng)站的好處百度上如何發(fā)廣告
  • 開(kāi)發(fā)平臺(tái)游戲名詞解釋搜索引擎優(yōu)化
  • 貴陽(yáng)疫情最新消息今天寧波seo排名優(yōu)化培訓(xùn)