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
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...