【技術積累】Python中的Pandas庫【一】

来源:https://www.cnblogs.com/yyyyfly1/archive/2023/06/06/17460472.html
-Advertisement-
Play Games

博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ...


Pandas庫介紹

Pandas 是一個用於數據分析的 Python 第三方庫,能夠處理和分析不同格式的數據,例如:CSV、Excel、SQL 資料庫等。Pandas 提供了兩種數據結構,分別為 Series 和 DataFrame,靈活而方便地進行數據分析和操作。

以下是 Pandas 的核心概念和功能:

  1. Series:類似於 NumPy 的 ndarray,可以存儲一維數組,不同的是它能夠自定義索引值。

  2. DataFrame:是一個表格型的數據結構,擁有行和列的索引,類似於 Excel 表格,可以存儲多維數組。DataFrame 可以被看成是Series類型的容器,每一列都是一個Series。

  3. Pandas 讀取和寫入數據:Pandas 可以處理不同文件格式和數據源的數據,例如:CSV、Excel、SQL 資料庫等。使用 Pandas,你可以輕鬆的讀取、整理和清理這些數據,最終生成一個 DataFrame。

  4. 數據清洗:Pandas 可以構建數據管道,以圖形化的方式進行數據操作和轉換,例如:刪減列和行,數據的修改和替換,數據去重等。

  5. 數據可視化:Pandas 可以通過 matplotlib 庫進行數據可視化,將最終的數據可視化並呈現給用戶。

Pandas 的功能十分豐富,可以處理任何類型的數據和數據結構,並提供多種方式進行數據操作和分析。由於其易學易用和高效性,Pandas 已成為數據科學和數據分析領域必不可少的工具之一。

如何從CSV、Excel、JSON等不同文件格式中讀取數據到Pandas中?

Pandas 支持讀取和寫入多種數據文件格式,包括 CSV、Excel、JSON 等。下麵是一些示例代碼,演示如何將不同的文件格式讀取到 Pandas 中。

從 CSV 文件中讀取數據:

import pandas as pd data = pd.read_csv('data.csv') print(data)

從 Excel 文件中讀取數據:

import pandas as pd data = pd.read_excel('data.xlsx', sheet_name='Sheet1') print(data)
 

從 JSON 文件中讀取數據:

import pandas as pd data = pd.read_json('data.json') print(data)

你還可以設置讀取時的參數,例如解析數據的方式、數據類型等。在 Pandas 中,有許多參數可以配置,以適應不同的需求和數據類型。可以參考官方文檔以瞭解更多信息。

如何在Pandas中處理缺失值(NaN)?

Pandas中處理缺失值有以下幾種方法:

  1. dropna()函數:刪除包含NaN的行或列(預設刪除包含NaN的行)。

  2. fillna()函數:將NaN值替換為其他數據(可以是0,平均值等)。

  3. isna()函數:返回一個布爾值,表示數據是否為NaN。

  4. notna()函數:返回一個布爾值,表示數據是否不為NaN。

  5. replace()函數:替換數據中的一個值為另一個值。

下麵是一個示例代碼,演示如何使用Pandas處理缺失值:

import pandas as pd
import numpy as np

# 創建包含NaN的DataFrame
data = {'A': [1, 2, np.nan, 4],
        'B': [5, np.nan, np.nan, 8],
        'C': [9, 10, 11, 12]}
df = pd.DataFrame(data)

# 使用dropna刪除包含NaN的行
df1 = df.dropna()
print(df1)

# 使用fillna將NaN替換為0
df2 = df.fillna(0)
print(df2)

# 使用fillna將NaN替換為平均值
df3 = df.fillna(df.mean())
print(df3)

# 使用isna返回布爾值
df4 = df.isna()
print(df4)

# 使用replace替換值
df5 = df.replace(np.nan, 0)
print(df5)

輸出結果

     A    B   C
0  1.0  5.0   9
3  4.0  8.0  12

     A    B   C
0  1.0  5.0   9
1  2.0  0.0  10
2  0.0  0.0  11
3  4.0  8.0  12

     A    B   C
0  1.0  5.0   9
1  2.0  6.5  10
2  2.333333  6.5  11
3  4.0  8.0  12

       A      B      C
0  False  False  False
1  False   True  False
2   True   True  False
3  False  False  False

     A    B   C
0  1.0  5.0   9
1  2.0  0.0  10
2  0.0  0.0  11
3  4.0  8.0  12

如何對Pandas中的數據進行簡單的描述性統計?

Pandas中可以使用describe方法對數據進行簡單的描述性統計,包括計數、平均數、標準差、最小值、25%,50%和75%分位數以及最大值等。具體實現步驟如下:

  1. 導入Pandas庫。
  2. 讀取數據。
  3. 使用describe方法對數據進行簡單的描述性統計。
import pandas as pd
# 讀取csv文件
data = pd.read_csv('data.csv')
# 對整個數據框進行描述性統計
data.describe()

# 對特定列進行描述性統計(例如,統計age列的描述性統計)
data['age'].describe()

如何對Pandas中的數據進行分組與聚合操作?

Pandas中的數據分組和聚合操作可以通過groupby方法來實現。具體步驟如下:

  1. 使用groupby方法將數據按照某一列或多列進行分組,例如:df.groupby('列名'),或者df.groupby(['列名1', '列名2'])

  2. 對分組後的數據進行聚合計算,可以使用sum、mean、count等方法,例如:df.groupby('列名').sum() 或 df.groupby(['列名1', '列名2']).mean()

  3. 可以使用agg方法進行自定義聚合計算,例如:df.groupby('列名').agg({'列名1': 'sum', '列名2': 'mean'})

  4. 也可以使用apply方法對每個分組執行特定的函數,例如:df.groupby('列名').apply(function)

  5. 可以使用transform方法對每個分組進行數據轉換,例如:df.groupby('列名').transform(lambda x: x - x.mean())

總之,Pandas的數據分組和聚合操作非常靈活,可以根據不同的需求進行不同的操作,提供了很大的便利性。

如何使用Pandas進行日期和時間處理?

Pandas支持datetime格式的數據,可以使用pandas.to_datetime函數將字元串格式的日期轉換為datetime格式,併進行各類日期和時間的計算和操作。

以下是一些常用的日期和時間處理方法:

  1. 創建日期時間索引 可以使用pandas.date_range()和pandas.DatetimeIndex()函數創建日期時間索引。

  2. 轉換日期格式 可以使用pandas.to_datetime()函數將字元串格式的日期轉換為datetime格式,或將日期格式化為指定格式。

  3. 獲取日期時間屬性 可以使用.dt屬性來獲取datetime格式數據的年、月、日、小時、分鐘、秒等屬性值。

  4. 偏移量計算 可以使用pandas.DateOffset()函數來進行日期偏移量計算,如計算前一天、前一周、前一月等。

  5. 時間序列重採樣 可以使用pandas.resample()函數對時間序列數據進行重採樣,如按月、周、日等頻率進行統計。

  6. 日期時間操作 可以使用datetime.timedelta()函數進行日期和時間的加減操作。

import pandas as pd
import datetime

# 創建日期時間索引
dates = pd.date_range(start='20220101', end='20220110', freq='D')
print(dates)

# 轉換日期格式
date_str = '20220101'
date_obj = pd.to_datetime(date_str, format='%Y-%m-%d')
print(date_obj)

# 獲取日期時間屬性
print(date_obj.year)
print(date_obj.month)
print(date_obj.day)
print(date_obj.hour)
print(date_obj.minute)
print(date_obj.second)

# 偏移量計算
date_offset = pd.DateOffset(months=1)
new_date = date_obj + date_offset
print(new_date)

# 時間序列重採樣
data = pd.DataFrame({'date': dates, 'value': range(len(dates))})
data.set_index('date', inplace=True)
resample_data = data.resample('W').sum()
print(resample_data)

# 日期時間操作
delta = datetime.timedelta(days=30)
new_date = date_obj + delta
print(new_date)

如何在Pandas中進行數據的透視和堆疊操作?

Pandas中可以通過pivot_table()函數進行數據透視,也可以通過stack()函數進行數據堆疊。下麵是示例代碼:

import pandas as pd

# 創建數據集
df = pd.DataFrame({
   'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
   'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
   'C': [1, 2, 3, 4, 5, 6, 7, 8],
   'D': [10, 20, 30, 40, 50, 60, 70, 80]
})

# 進行數據透視
result = df.pivot_table(values='D', index=['A', 'B'], columns=['C'])

print(result)
C          1     2     3     4     5     6     7     8
A   B                                                
bar one   20.0   NaN   NaN   NaN   NaN  60.0   NaN   NaN
    three  NaN   NaN   NaN  40.0   NaN   NaN   NaN   NaN
    two    NaN  20.0   NaN   NaN   NaN  60.0   NaN   NaN
foo one   10.0   NaN   7.0   NaN   NaN   NaN  70.0   NaN
    three  NaN   NaN   NaN   NaN   NaN   NaN   NaN  80.0
    two   50.0  30.0   NaN   NaN  50.0   NaN   NaN   NaN
import pandas as pd

# 創建數據集
df = pd.DataFrame({
   'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
   'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
   'C': [1, 2, 3, 4, 5, 6, 7, 8],
   'D': [10, 20, 30, 40, 50, 60, 70, 80]
})

# 進行數據堆疊
stacked = df.stack()

print(stacked)
0  A      foo
   B      one
   C        1
   D       10
1  A      bar
         ... 
6  C        7
   D       70
7  A      foo
   B    three
   C        8
   D       80

如何在Pandas中進行數據的可視化?

Pandas提供了多種數據可視化方法,其中常用的是基於Matplotlib的可視化。以下是在Pandas中進行數據可視化的步驟:

  1. 導入Pandas和Matplotlib庫:

  2. 讀取數據並創建DataFrame對象:

  3. 數據進行必要的處理和清洗:

  4. 用DataFrame.plot()方法進行可視化:
import pandas as pd
import matplotlib.pyplot as plt

# 讀取數據
data = pd.read_csv('data.csv')
df = pd.DataFrame(data)

# 清洗數據
df = df.dropna()

# 繪製柱狀圖
df.plot(kind='bar', x='country', y='population')
plt.title('Population by Country')
plt.xlabel('Country')
plt.ylabel('Population')
plt.show()

# 繪製散點圖
df.plot(kind='scatter', x='gdp_per_capita', y='life_expectancy')
plt.title('Relationship between GDP per capita and life expectancy') 
plt.xlabel('GDP per capita')
plt.ylabel('Life expectancy')
plt.show()

如何在Pandas中進行數據的篩選和排序?

在Pandas中,可以使用以下的方式對數據進行篩選和排序:

  1. 使用布爾索引進行數據篩選:可以通過指定列的條件來篩選符合條件的數據。例如,df[df['age'] >= 18]可以選出所有年齡大於等於 18 的數據。

  2. 使用 isin() 函數進行數據篩選:可以使用 isin() 函數來篩選符合條件的數據。例如,df[df['city'].isin(['Shanghai', 'Beijing'])]可以篩選出居住在上海和北京的數據。

  3. 使用 sort_values() 函數進行數據排序:可以使用 sort_values() 函數對數據進行排序。例如,df.sort_values(by=['age', 'salary'], ascending=[False, True])可以按照年齡降序、薪水升序的方式進行排序。

  4. 使用 nlargest() 和 nsmallest() 函數進行數據篩選:可以使用 nlargest() 和 nsmallest() 函數來篩選前n個或後n個最大值或最小值。例如,df.nlargest(10, 'salary')可以選出薪水前10名的員工數據。

在黑夜裡夢想著光,心中覆蓋悲傷,在悲傷里忍受孤獨,空守一絲溫暖。 我的淚水是無底深海,對你的愛已無言,相信無盡的力量,那是真愛永在。 我的信仰是無底深海,澎湃著心中火焰,燃燒無盡的力量,那是忠誠永在。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • # JVM運行時數據區 ## 簡介 JVM運行時數據區包括:JVM棧(虛擬機棧),堆,方法區,本地方法棧,PC寄存器。大概的劃分就是棧和堆,以及一些其他的結構。重點在JVM棧,堆,方法區。JVM規範指出:方法區在邏輯上屬於堆,但是實際的具體的JVM中並不屬於堆的一部分。 在JVM棧中會發生GC和Er ...
  • 本文使用代碼片段的形式來解釋在 go 語言開發中經常遇到的小功能點,由於本人主要使用 java 開發,因此會與其作比較,希望對大家有所幫助。 ...
  • 基於java的養老院管理系統設計與實現;可適用於敬老院管理系統,老人管理系統,老人信息管理系統,java養老院信息系統,java敬老院信息管理系統; ...
  • 一、開通OpenAI賬號 1.註冊OpenAI賬號 官網地址:https://openai.com/ 註意:提前準備好國外手機號,沒有的話用簡訊平臺購買手機號接收簡訊 2.購買國外手機號 地址:https://tiger-sms.com/ 我用支付寶充值了30多元(起充要30,加上手續費30多有點坑 ...
  • 當《阿裡巴巴Java開發手冊》發佈後,我也是仔細進行了閱讀,想從中找出一些“標準”,讓自己的代碼質量提高。手冊中對 Object 的 equals 方法的使用進行了強制,而且推薦使用 JDK7 中工具類 Objects 的 equals 方法,至此之後我就很少使用 Object.equals() 方... ...
  • # if語句-語法格式 簡單理解if語句之後,我們的if語句語法格式有多種,選擇使用哪種取決於要測試的條件數 # 1.if結構 最簡單的if語句只有一個條件測試和一個代碼塊 其語法格式: ![image](https://img2023.cnblogs.com/blog/3179433/202306 ...
  • #### 使用thymeleaf做html模板,由xhtmlrenderer/flying-saucer-pdf-openpdf將html轉為PDF > LGPL 和 MPL 許可 #### pom.xml引入依賴 ````java org.springframework.boot spring-b ...
  • > 文中所涉及到的代碼運行結果均是在64位機器上執行得到的. ## 基礎知識回顧 在Go中,我們可以使用`unsafe.Sizeof(x)`來查看變數所占的記憶體大小。以下是Go內置的數據類型占用的記憶體大小: | 類型 | 記憶體大小(位元組數) | | : | : | | bool | 1 | | in ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...