pyhton_Pandas教程

来源:https://www.cnblogs.com/komorebiZjh/archive/2022/05/01/16213317.html
-Advertisement-
Play Games

Pandas 是 Python 語言的一個擴展程式庫,用於數據分析。 Pandas 是一個開放源碼、BSD 許可的庫,提供高性能、易於使用的數據結構和數據分析工具。 Pandas 名字衍生自術語 "panel data"(面板數據)和 "Python data analysis"(Python 數據 ...


Pandas 是 Python 語言的一個擴展程式庫,用於數據分析。

  Pandas 是一個開放源碼、BSD 許可的庫,提供高性能、易於使用的數據結構和數據分析工具。

  Pandas 名字衍生自術語 "panel data"(面板數據)和 "Python data analysis"(Python 數據分析)。

  Pandas 一個強大的分析結構化數據的工具集,基礎是 numpy(提供高性能的矩陣運算)。

  Pandas 可以從各種文件格式比如 CSV、JSON、SQL、Microsoft Excel 導入數據。

  Pandas 可以對各種數據進行運算操作,比如歸併、再成形、選擇,還有數據清洗和數據加工特征。

數據結構

Series 是一種類似於一維數組的對象,它由一組數據(各種Numpy數據類型)以及一組與之相關的數據標簽(即索引)組成。

DataFrame 是一個表格型的數據結構,它含有一組有序的列,每列可以是不同的值類型(數值、字元串、布爾型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 組成的字典(共同用一個索引)。


一、Pandas 安裝

  安裝 pandas 需要基礎環境是 Python,開始前我們假定你已經安裝了 Python 和 Pip。

pip install pandas

 查看pandas的版本

import pandas as pd

print(pd.__version__)

 

二、Pandas 數據結構 -- Series

  pandas.Series( data, index, dtype, name, copy)
  data:一組數據(ndarray 類型)。
  index:數據索引標簽,如果不指定,預設從 0 開始。
  dtype:數據類型,預設會自己判斷。
  name:設置名稱。
  copy:拷貝數據,預設為 False。

mydataset = {
'sites': ["Google", "Runoob", "Wiki"],
'number': [1, 2, 3]
}
#將字典類型轉化成dataframe類型
myvar = pd.DataFrame(mydataset)
print(myvar)
print()

a = [1, 2, 3]
myvar = pd.Series(a)
print(myvar)
print(myvar[1])#指定索引查詢

sites = {1: "Google", 'runoob': "Runoob", 3: "Wiki"}
myvar = pd.Series(sites)#使用字典類型創建Series,key的值就成了索引值
print(myvar)
print()

# 參數index
a = ["Google", "Runoob", "Wiki"]
myvar = pd.Series(a, index = ["x", "y", "z"])#index指定索引名稱
print(myvar)
print(myvar['y'])
print()

sites = {1: "Google", 2: "Runoob", 3: "Wiki"}
myvar = pd.Series(sites, index = [3, 2])#使用索引,截取字典中所需的部分
print(myvar)
print()

# 參數name,設置name屬性
sites = {1: "Google", 2: "Runoob", 3: "Wiki"}
myvar = pd.Series(sites, index = [1, 2], name="I is series(name)" )
print(myvar)

  

三、Pandas 數據結構 - DataFrame

  pandas.DataFrame( data, index, columns, dtype, copy)
  data:一組數據(ndarray、series, map, lists, dict 等類型)。
  index:索引值,或者可以稱為行標簽。
  columns:列標簽,預設為 RangeIndex (0, 1, 2, …, n) 。
  dtype:數據類型。
  copy:拷貝數據,預設為 False。

data = [['Google',10],['Runoob',12],['Wiki',13]]
df = pd.DataFrame(data,columns=['Site','Age'],dtype=float) # 列表轉dataframe
print(df)

data = {'Site':['Google', 'Runoob', 'Wiki'], 'Age':[10, 12, 13]}
df = pd.DataFrame(data) # 字典轉dataframe
print (df)

data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data)
print (df)

data = {
"calories": [420, 380, 390],
"duration": [50, 40, 45]
}
df = pd.DataFrame(data)
print(df)
print(df.loc[0])# 使用df.loc[]返回第一行
print(df.loc[1])# 使用df.loc[]返回第一行
print(df.loc[[0,1]])# 使用df.loc[[ ]]返回兩行數據
print(df.loc[0:1,['calories']])# 使用df.loc[a:b ,[' ']]返回指定某列 a~b的數據

data = {
"calories": [420, 380, 390],
"duration": [50, 40, 45]
}
df = pd.DataFrame(data, index = ["day1", "day2", "day3"])#指定索引值
print(df)
print(df.loc['day2'])

 

 四、Pandas CSV 文件

   1、read_csv()  將csv()文件導入,存在Dataframe對象中

import pandas as pd

# pd.read_csv() 讀取csv文件
df = pd.read_csv('./nba.csv',encoding='GBK')
print(df.to_string())
print(df.loc[:,['Name']])#獲取列

# head()
print(df.head().to_string())#預設獲取前5行
print(df.head(3).to_string())#獲取前3行

# tail()
print(df.tail().to_string())#預設獲取後5行
print(df.head(3).to_string())#獲取後3行

# info() 返回表格的一些基本信息
print(df.info())

   2、to_csv() 將 DataFrame 存儲為 csv 文件

import pandas as pd


# 使用 to_csv() 方法將 DataFrame 存儲為 csv 文件
nme = ["Google", "Runoob", "Taobao", "Wiki"]
st = ["www.google.com", "www.runoob.com", "www.taobao.com", "www.wikipedia.org"]
ag = [90, 40, 80, 98]
dict = {'name': nme, 'site': st, 'age': ag}
df = pd.DataFrame(dict)
# print(df)

df.to_csv('./aaa.csv')# 保存 dataframe到該文件夾下
df.to_csv(r'C:\Users\Public\Desktop\a1.csv',encoding='utf8')# 保存 dataframe到指定路徑

path = r"C:\Users\Public\Desktop"
wen = '\ccc.csv'
df.to_csv(path+wen,encoding='utf8')
 3、to_string() 用於返回 DataFrame 類型的數據,如果不使用該函數,則輸出結果為數據的前面 5 行和末尾 5 行,中間部分以 ... 代替。
import pandas as pd
df = pd.read_csv('nba.csv') print(df)

  

五、Pandas JSON

1、JSON 對象與 Python 字典具有相同的格式,所以我們可以直接將 Python 字典轉化為 DataFrame 數據:
import pandas as pd

# 字典格式的 JSON                                                                                              
s = {
    "col1":{"row1":1,"row2":2,"row3":3},
    "col2":{"row1":"x","row2":"y","row3":"z"}
}
# 讀取 JSON 轉為 DataFrame                                                                                          
df = pd.DataFrame(s)
print(df)

  以上實例輸出結果為:

      col1 col2
row1     1    x
row2     2    y
row3     3    z

  2、從 URL 中讀取 JSON 數據:

import pandas as pd

URL = 'https://static.runoob.com/download/sites.json'
df = pd.read_json(URL)
print(df)

  

六、Pandas 數據清洗

  數據清洗是對一些沒有用的數據進行處理的過程。

  很多數據集存在數據缺失數據格式錯誤錯誤數據重覆數據的情況,如果要對使數據分析更加準確,就需要對這些沒有用的數據進行處理。

  在這個教程中,我們將利用 Pandas包來進行數據清洗。

 

1、Pandas 清洗空值

   如果我們要刪除包含空欄位的行,可以使用 dropna() 方法,語法格式如下:

    DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
參數說明:
axis:  預設為 0,表示逢空值剔除整行,如果設置參數 axis=1 表示逢空值去掉整列。 how:   預設為 'any' 如果一行(或一列)里任何一個數據有出現 NA 就去掉整行,如果設置 how='all' 一行(或列)都是 NA 才去掉這整行。 thresh: 設置需要多少非空值的數據才可以保留下來的。 subset: 設置想要檢查的列。如果是多個列,可以使用列名的 list 作為參數。 inplace如果設置 True,將計算得到的值直接覆蓋之前的值並返回 None,修改的是源數據。預設為False

  1.1、添加na_values屬性指定的某些數據修改為空數據(NaN)

# df = pd.read_csv(r'C:\Users\Administrator\Desktop\property-data.csv')
missing_values = ["n/a", "na", "--","N","Y"]
df1 = pd.read_csv('./property-data.csv')
df2 = pd.read_csv('./property-data.csv',na_values=missing_values)#添加na_values屬性指定的某些數據修改為空數據(NaN)
print(df1)
print(df2)
# print(df2['SQ_FT'].isnull())#判斷某列中的各個單元格是否為空

  1.2、 dropna() 方法 返回一個新的 DataFrame,不會修改源數據。

# 如果你要修改源數據 DataFrame, 可以使用 inplace = True 參數:
new_df = df1.dropna()#如果某行中有一個單元格數據為空則刪除整行
new_df2 = df1.dropna(subset=['NUM_BATH'])# 某指定列如果有空數據,則刪除空數據所在行
print(new_df)
# print(new_df2)

  1.3、 fillna()方法 來替換一些空欄位

df3 = df1.fillna('666') #添加 inplace=True屬性會改變源數據
df4 = df1['NUM_BEDROOMS'].fillna('555') #指定某列獲取數據並替換空數據
print(df3)
print(df4)

  1.4、使用 mean() 方法計算列的均值並替換空單元格

x = df1["ST_NUM"].mean() #指定某列進行平均值計算
df1["ST_NUM"].fillna(x, inplace = True)#使用fillna()方法進行數據替換
print(x)
print(df1)

  1.5、使用 median() 方法計算列的中位數並替換空單元格:

x = df1["PID"].median()
df1_1 = df1["PID"].fillna(x)
print(x)
print(df1_1)

  1.6、使用 mode() 方法計算列的眾數並替換空單元格

x = df1["PID"].mode()
df1["PID"].fillna(x,inplace=True)
print(x)
print(df1)

  

2、Pandas 清洗格式錯誤數據

3、Pandas 清洗錯誤數據

4、Pandas 清洗重覆數據










您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 後端介面對接的模式範本: 概念澄清: 【下單】是個廣義上的叫法,並不僅限於支付訂單的訂單。因為整個過程都圍繞一個【seqNo】訂單號或流水號這個唯一標識展開,因而統稱【下單】。 【下單】可以是為派發一個優惠券、申請一個支付訂單、申請一個發票等等。 【seqNo】也可以叫orderNo,有唯一性,每次 ...
  • 近期項目上面用到了Azure Service Fabric這個服務,它是用來做微服務架構的,由於這套代碼和架構都是以前同學留下來的,缺少文檔,項目組在折騰時也曾遇到幾個問題,這裡整理如下,以供參考。 我屬於Service Fabric的初學者和使用者,很多概念也都是臨時學習的,我們的工程師後續會更加 ...
  • 微軟商店下載的python不能修改config的解決方法 找到圖中文件的位置 C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.9_3.9.3312.0_x64__qbz5n2kfra8p0\\pip.ini 右鍵屬性 ...
  • Swing概述 實際使用 Java 開發圖形界面程式時 ,很少使用 AWT 組件,絕大部分時候都是用 Swing 組件開發的 。 Swing是由100%純 Java實現的,不再依賴於本地平臺的 GUI, 因此可以在所有平臺上都保持相同的界面外觀。獨立於本地平臺的Swing組件被稱為輕量級組件;而依賴 ...
  • 經常看到有人說什麼值傳遞、引用傳遞,其實都是值傳遞,區別不過是傳的值的類型罷了。 傳值方式 java傳值有且只有一種方式,將參數的“值”複製後傳入,這個“值”是指變數名所對應的地址中存放的值,對於值類型和對象類型,由於地址中存放的東西不同,因此表現有所不同: 對於8種值類型,其存放的就是本身的值,因 ...
  • 訪問許可權修飾符: public 修飾class,方法,變數; 所修飾類的名字必須與文件名相同,文件中最多能有一個pulic修飾的類。 private class不可用,方法,變數可以用; 只限於本類成員訪問和修改,本類和子類的對象實例都不能訪問。 protected class不可用,成員(方法&變 ...
  • Tkinter組件 § Label 描述:標簽控制項,可以顯示文本和點陣圖。 語法: master:框架的父容器 option:可選項,即該標簽的可設置的屬性。這些選項可以用鍵=值的形式設置,並以逗號分隔。 序號|可選項 & 描述 : |: 1 | anchor 文本或圖像在背景內容區的位置,預設為 c ...
  • 今天一大早,群里(點擊加群)有小伙伴問了這樣的一個問題: 在我們使用IDEA開發項目的時候,通常都會有很多配置項需要去設置,比如對於Java項目來說,一般就包含:JDK配置、Maven配置等。那麼如果想要設置一個預設的項目配置的話,要如何做呢? 先來找到入口,在File菜單中找到New Projec ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...