學習python第12天

今日任務:

DataFrame

DataFrame的構造

pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)

參數說明:

  • data:DataFrame 的數據部分,可以是字典、二維數組、Series、DataFrame 或其他可轉換為 DataFrame 的對象。如果不提供此參數,則創建一個空的 DataFrame。

  • index:DataFrame 的行索引,用于標識每行數據。可以是列表、數組、索引對象等。如果不提供此參數,則創建一個默認的整數索引。

  • columns:DataFrame 的列索引,用于標識每列數據。可以是列表、數組、索引對象等。如果不提供此參數,則創建一個默認的整數索引。

  • dtype:指定 DataFrame 的數據類型。可以是 NumPy 的數據類型,例如?np.int64np.float64?等。如果不提供此參數,則根據數據自動推斷數據類型。

  • copy:是否復制數據。默認為 False,表示不復制數據。如果設置為 True,則復制輸入的數據。


DataFrame的創建

  • 用列表
import pandas as pddata = [
['Google', 10], 
['Runoob', 12], 
['Wiki', 13]]# 創建DataFrame
df = pd.DataFrame(data, columns=['Site', 'Age'])# 使用astype方法設置每列的數據類型
df['Site'] = df['Site'].astype(str)
df['Age'] = df['Age'].astype(float)print(df)
  • ?用數組
import numpy as np
import pandas as pd# 創建一個包含網站和年齡的二維ndarray
ndarray_data = np.array([['Google', 10],['Runoob', 12],['Wiki', 13]
])# 使用DataFrame構造函數創建數據幀
df = pd.DataFrame(ndarray_data, columns=['Site', 'Age'])# 打印數據幀
print(df)?
  • 用字典,按列
import pandas as pddata = {
'Site':['Google', 'Runoob', 'Wiki'], 
'Age':[10, 12, 13]
}df = pd.DataFrame(data)print (df)
  • 用字典,按行,沒有對應的部分數據為?NaN
import pandas as pddata = [{'a': 1, 'b': 2},
{'a': 5, 'b': 10, 'c': 20}]df = pd.DataFrame(data)print (df)

返回指定數據

  • 按索引名

返回單行,結果其實是一個Series,該Series的索引名是DataFrame的列名,列名是DataFrame的索引名

import pandas as pddata = {"calories": [420, 380, 390],"duration": [50, 40, 45]
}# 數據載入到 DataFrame 對象
df = pd.DataFrame(data)# 返回第一行
print(df.loc[0])
# 返回第二行
print(df.loc[1])

    結果:

    calories    420
    duration     50
    Name: 0, dtype: int64
    calories    380
    duration     40
    Name: 1, dtype: int64
    

    返回多行,結果其實是一個DataFrame,列名索引名不變

    import pandas as pddata = {"calories": [420, 380, 390],"duration": [50, 40, 45]
    }# 數據載入到 DataFrame 對象
    df = pd.DataFrame(data)# 返回第一行和第二行
    print(df.loc[[0, 1]])

    結果:

       calories  duration
    0       420        50
    1       380        40

    如果索引名不是默認的從0開始的整數:

    import pandas as pddata = {"calories": [420, 380, 390],"duration": [50, 40, 45]
    }df = pd.DataFrame(data, index = ["day1", "day2", "day3"])# 指定索引
    print(df.loc["day2"])
    • 按列名
    import pandas as pddata = {"calories": [420, 380, 390],"duration": [50, 40, 45]"others": [123, 22, 66]
    }df = pd.DataFrame(data)# 指定索引
    print(df[['calories','duration']])
    • 訪問單個元素

    先列,后行

    print(df['Name'][0])

    先行,后列,表示所有的行,列名為'Column1'

    print(df.loc[:, 'Column1'])

    .loc[]和.iloc[]的區別

    .loc[]是按索引名

    .iloc[]是按位置

    import pandas as pddata = [
    ['amy','tony']
    ]df=pd.DataFrame(data, index=['girl','boy'], columns='name')#第一行
    print(df.loc['girl'])#第一行
    print(df.iloc[0])
    # 索引和切片
    print(df[['Name', 'Age']])  # 提取多列
    print(df[1:3])               # 切片行
    print(df.loc[:, 'Name'])     # 提取單列
    print(df.loc[1:2, ['Name', 'Age']])  # 標簽索引提取指定行列
    print(df.iloc[:, 1:])        # 位置索引提取指定列

    DataFrame常用方法,與Seires類似

    head(n)返回 DataFrame 的前 n 行數據(默認前 5 行)
    tail(n)返回 DataFrame 的后 n 行數據(默認后 5 行)
    info()顯示 DataFrame 的簡要信息,包括列名、數據類型、非空值數量等
    describe()返回 DataFrame 數值列的統計信息,如均值、標準差、最小值等
    shape返回 DataFrame 的行數和列數(行數, 列數)
    columns返回 DataFrame 的所有列名
    index返回 DataFrame 的行索引
    dtypes返回每一列的數值數據類型
    sort_values(by,ascending)按照指定列排序,by=列名,ascending=True(升序) or False(降序)
    sort_index()按行索引排序
    dropna()刪除含有缺失值(NaN)的行或列
    fillna(value)用指定的值填充缺失值
    isnull()判斷缺失值,返回一個布爾值 DataFrame
    notnull()判斷非缺失值,返回一個布爾值 DataFrame
    loc[]按標簽索引選擇數據
    iloc[]按位置索引選擇數據
    at[]訪問 DataFrame 中單個元素(比?loc[]?更高效)
    iat[]訪問 DataFrame 中單個元素(比?iloc[]?更高效)
    apply(func)對 DataFrame 或 Series 應用一個函數
    applymap(func)對 DataFrame 的每個元素應用函數(僅對 DataFrame)
    groupby(by)分組操作,用于按某一列分組進行匯總統計
    pivot_table()創建透視表
    merge()合并多個 DataFrame(類似 SQL 的 JOIN 操作)
    concat()按行或按列連接多個 DataFrame
    to_csv()將 DataFrame 導出為 CSV 文件
    to_excel()將 DataFrame 導出為 Excel 文件
    to_json()將 DataFrame 導出為 JSON 格式
    to_sql()將 DataFrame 導出為 SQL 數據庫
    query()使用 SQL 風格的語法查詢 DataFrame
    duplicated()返回布爾值 DataFrame,指示每行是否是重復的
    drop_duplicates()刪除重復的行
    set_index()設置 DataFrame 的索引
    reset_index()重置 DataFrame 的索引
    transpose()轉置 DataFrame(行列交換)

    數據修改

    修改列數據:重新賦值

    df['Column1'] = [10, 11, 12]

    添加新列:給新列賦值

    df['NewColumn'] = [100, 200, 300]

    合并行/列

    pd.concat():pandas 內部的一個方便的函數,用于垂直(按行)或水平(按列)連接 DataFrame。

    • objs 參數是一個要串聯的 Series 或 DataFrame 對象的序列或映射。

    • axis 參數決定連接的方向:

      • axis=0 設置為缺省值(默認),這意味著它將垂直(按行)連接 DataFrame。

      • axis=1 將水平連接 DataFrame(按列)。

    # 使用concat添加新行
    new_row = pd.DataFrame([[4, 7]], columns=['A', 'B'])  # 創建一個只包含新行的DataFrame
    df = pd.concat([df, new_row], ignore_index=True)  # 將新行添加到原始DataFrameprint(df)

    merge()

    pd.merge(df1, df2, on='Column1')

    分割

    pivot、melt


    刪除

    刪除列

    df_dropped = df.drop('Column1', axis=1)

    刪除行

    df_dropped = df.drop(0)  # 刪除索引為 0 的行

    刪除重復行

    drop_duplicates(subset =, keep = 'first', inplace = False)

    drop_duplicates() 函數參數定義:

    • subset:此參數標識重復行時要考慮的列標簽或標簽序列。如果未提供,它將處理 DataFrame 中的所有列。

    • keep:此參數確定要保留的重復行。

      • 'first': (默認) 刪除除第一個匹配項以外的重復項。

      • 'last': 刪除除最后一個匹配項之外的重復項。

      • False: 刪除所有重復項。

    • inplace: 如果設置為 True,則直接對對象進行更改,而不返回新的對象。如果設置為 False(默認),則返回丟棄重復的新對象。

    刪除缺失值

    DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

    dropna 函數參數定義:

    • axis: 它可以是 {0 or 'index', 1 or 'columns'}。默認為 0。如果 axis=0,則丟棄包含缺失值的行;如果 axis=1,則丟棄包含缺失值的列。

    • how: 確定當我們至少有一個 NA 或全部 NA 時,是否從 DataFrame 中刪除行或列。

      • how='any': 如果存在任何 NA 值,則刪除該行或列(默認)。

      • how='all': 如果所有值都為 NA,則刪除該行或列。

    • thresh: 需要多少非 NA 值。這是一個整型參數,需要最小數量的非 NA 值才能保留行/列。

    • subset: 要考慮的另一個軸上的標簽,例如,如果您正在刪除行,則這些標簽將是要包括的列的列表。當您只想考慮某些列中的 NA 值時,這特別有用。

    • inplace: 這是一個布爾值,如果是 True,則對 DataFrame 本身進行更改。請記住,在使用 inplace=True 參數時,您修改的是原始的 DataFrame。如果出于任何原因需要保留原始數據,請避免使用 inplace=True,而是將結果賦給新的 DataFrame。


    列/索引重命名

    DataFrame.rename(mapper=None, index=None, columns=None, axis=None, copy=True, inplace=False, level=None, errors='raise')
    
    • mapper, index, columns:可以傳遞以重命名索引或列的詞典。在我們的示例中,我們使用 columns。

    • axis: 可以是 "index" 或 "columns"。確定是重命名索引還是重命名列。默認情況下,如果您提供 columns 參數,您將重命名列。

    • copy: 如果設置為 True,則創建一個新的 DataFrame。如果為 False,則修改原始 DataFrame。

    • inplace: 如果設置為 True,則重命名會原地修改 DataFrame,不會返回任何內容。如果為 False,則在不修改原有 DataFrame 的情況下,返回一個新的帶有更名列的 DataFrame。

    • level: 對于具有多級索引的 DataFrame,應當重命名標簽的級別。

    • errors: 如果是 'raise',如果嘗試重命名不存在的項,則會引發錯誤。如果設置為 'ignore',任何重命名項目的失敗都將被忽略。

    我們關注'columns','index'參數就可以了

    import pandas as pdnewname={'id':'student_id','first':'first_name','last':'last_name','age':'age_in_years'}
    students.rename(columns=newname,inplace=True)

    改變數據類型

    DataFrame.astype(dtype, copy=True, errors='raise')
    • dtype: 它是一種數據類型,或列名->數據類型的字典。

    • copy: 默認情況下,astype 總是返回新分配的對象。如果 copy 設置為 False,則只有在舊對象無法強制轉換為所需類型的情況下才會創建新對象。

    • errors: 控制對提供的數據類型的無效數據引發異常。默認設置為 raise,表示會引發異常。

    students = students.astype( {'grade':int})
    return students

    填充缺失值

    .fillna(value, method = None, axis, inplace)
    • value: 標量,字典,Series 或 DataFrame。用于填充空洞的值(例如 0)。這就是我們在解決方案中使用的。

    • method: {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}。用于填充重新索引 Series 中的空洞的方法。默認為 None。

    • axis: {0 or ‘index’, 1 or ‘columns’}。沿其填充缺失值的軸。

    • inplace: 布爾值。如果為True,則原地填充。注意:這將修改此對象上的任何其他視圖。默認值為 False。

    由于這個函數無法制定列/行,所以如果想要對某一行/列填充缺失值,就要把fillna這個函數作用在這個列/行上

    products['quantity'].fillna(0,inplace=True)

    長、寬表格轉換(透視)

    pivot 函數

    在 pandas 中 pivot 函數被用來基于列的值重塑數據并且在外部得到一個新的 DataFrame。pivot 采用我們將使用的以下參數:

    • index: 確定新 DataFrame 中的行。

    • columns: 確定新 DataFrame 中的列。

    • values: 指定重塑表格時要使用的值。

    舉例:

    將上面的表轉換為下面的表:

    weather.pivot(index='month',columns='city',values='temperature')

    melt 函數

    ?pandas 的 melt 函數用于轉換或重塑數據。它將 DataFrame 從寬格式(列表示多個變量)更改為長格式(每行表示一個唯一變量)

    舉例解釋:

    • id_vars:這指定了應該保持不變的列。對于這個問題,只有 product 列保持不變,因為我們希望輸出中的每一行都與一個產品相關聯。

    • value_vars:這指定了我們想要“melt”或將其整形成行的列。在我們的示例中,以下是每個季度的銷售數據列:quarter_1、quarter_2、quarter_3 和 quarter_4。

    • var_name:這是將存儲來自 value_vars 的標頭名稱的新列的名稱。在我們的問題中,這些是季度名稱。

    • value_name:這是將存儲 value_vars 中的值的新列的名稱。在我們的問題中,這將是每個季度每種產品的銷售數據。


    pandas的方法真的太多了,靠人腦子真的記不過來。不過雖然平時在處理數據的時候,我一般都是讓AI編寫程序,因為這種清洗、處理數據的活,AI可以做的非常好,思路明確,不用人絞盡腦汁思考先處理什么,再處理什么,效率嘎嘎高。不太確定學習到的這些方法,過兩天還能不能記得住,但總歸有些印象,真工作的時候,還讓AI干。今晚在力扣上刷了一些pandas的題目,還是感覺到自己的思路被拓寬了(os:原來數據還能這么分析),這也是學習pandas的一些收獲吧。一邊學基本的方法,一邊刷力扣,我覺得是非常有用的,可以看到學習的這些方法,都可以怎么去處理實際問題,所以邊學邊干,進步飛快~

    今晚周五同事們下班的都賊早,七點半的時候辦公室就只有我一個人了(以往九點鐘人都很多),+2不知道從哪里突然冒出來,嚇了我一跳,催另一個同事下班,居然沒催我下班,應該是看到我在學習pandas了。希望我不要被冠以卷王的名號(雖然我感覺在辦公室已經有這個苗頭了),沒辦法,我是苦逼實習生,白天實習,晚上秋招,時不時導師那邊還要開組會,你們這些正式工就別和我卷了,真說卷,我也卷不過你們,你們晚上十點才下班的。。。。

    本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
    如若轉載,請注明出處:http://www.pswp.cn/diannao/96418.shtml
    繁體地址,請注明出處:http://hk.pswp.cn/diannao/96418.shtml
    英文地址,請注明出處:http://en.pswp.cn/diannao/96418.shtml

    如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

    相關文章

    C++顯示類型轉換運算符static_cast使用指南

    這是一篇關于 static_cast 用法的文章。本文會從基礎概念到常見應用場景全覆蓋,并附上代碼示例以方便理解。C 中的 static_cast 用法詳解 在 C 中,static_cast 是一種顯式類型轉換運算符,主要用于在編譯期進行類型安全的轉換。相比 C 風格的強…

    es6常用方法來解決功能需求

    前言:es6常用方法來解決功能需求。1、出現復雜的json字符串如何去解析?比如:下面這個字符串,如果用json.parse解析發現還是個字符串"\"[{\\\"orgId\\\":\\\"1054021138280960\\\",\\\"orgName…

    龍虎榜——20250822

    上證指數今天繼續創新高收中陽線,量能維持在5天均量線附近,目前均線多頭強勢的走勢,小級別也未出現反轉信號,上漲趨勢不要輕易看空。深證指數今天延續強勢的走勢,大漲收光頭光腳的陽線,目前均線多頭排列&am…

    3維模型導入到3Dmax中的修改色彩簡單用法----第二講

    目錄回顧1 補充信息*stp導出沒有顏色怎么辦?*2 3Dmax的使用如果顏色丟失了怎么辦呢?怎么實現一零件上多個色彩呢?怎么將零件綁到一起呢?怎么將三角形的面變成光滑曲面呢?回顧 上一講,我們簡單的說了一下&a…

    智慧農業新基建:邊緣計算網關在精準農業中的落地實踐案例

    智慧農業新基建:邊緣計算網關在精準農業中的落地實踐案例傳統農業生產中,水肥管理依賴經驗判斷,往往造成資源浪費和產量不穩定;同時,惡劣的自然環境也給農業生產帶來諸多挑戰。而藍蜂邊緣計算網關在精準農業中的應用&a…

    llm操控solidworks 畫立方體 deepseek

    deepseek接入solidowrks畫立方體用eval方法鏈接llm和solidworks pythonwin32接口 離好的效果還差一個有腦子會生成復雜命令序列的ai 參考 基于Python的Solidworks二次開發方法_selectbyray-CSDN博客 Welcome - 2025 - SOLIDWORKS API Help 倉庫 llm_sw: llm鏈接solidworks…

    MySQL事務及原理詳解

    MySQL 事務 事務是一組不可分割的操作集合,這些操作要么同時成功提交,要么同時失敗回滾。 acid事物的四大特性 原子性 最小工作單元,要么同時成功,要么同時失敗。 例如A轉賬300給B,A賬戶-300與B賬戶300必須滿足操作原子性&#xf…

    Flutter上手記:為什么我的按鈕能同時在iOS和Android上跳舞?[特殊字符][特殊字符]

    文章目錄🔥 先解決靈魂拷問:憑啥選Flutter?🧱 解剖Flutter:它肚子里藏著什么黑科技?三層蛋糕架構 🎂狀態管理?江湖門派大戰! 🥋🛠 真實項目暴擊&a…

    單片 、物聯網、51單片機、軟硬件之基于STM32與藍牙的倉儲管控系統的設計與實現/基于物聯網的倉庫管理系統

    單片 、物聯網、51單片機、軟硬件之基于STM32與藍牙的倉儲管控系統的設計與實現/基于物聯網的倉庫管理系統

    Product Hunt 每日熱榜 | 2025-08-22

    1. Mocke 標語:模擬郵件營銷:在不發起活動的情況下了解你的回復率 介紹:Mocke AI代理模擬運行電子郵件營銷活動,并在一分鐘內返回結果,包括郵件的打開率、回復率和退訂率。它還會揭示每個潛在客戶為何未打開郵件、報…

    基于Java+SpringBoot+Vue+HTML5電影評論網站系統(源碼+LW+調試文檔+講解等)/電影評論/網站系統/電影/評論/網站/系統/影評網站/電影網站/評論系統/電影評論系統

    博主介紹 💗博主介紹:?全棧領域優質創作者,專注于Java、小程序、Python技術領域和計算機畢業項目實戰?💗 👇🏻 精彩專欄 推薦訂閱👇🏻 2025-2026年最新1000個熱門Java畢業設計選題…

    家用電器,讓現代家庭生活更美好

    在現代家庭中,家用電器早已不再是冰冷的機器,而是成為了我們生活中不可或缺的一部分。它們以科技之名,融入我們的日常,讓生活變得更加便捷、舒適和美好。 清晨,當第一縷陽光透過窗簾,智能咖啡機已經為您準備…

    RabbitMQ延時隊列的兩種實現方式

    目錄 一、延時插件實現 1、版本要求 2、為運行新容器時安裝 3、為已運行的容器安裝 4、驗證安裝 5、代碼編寫 1. 配置類 2. 生產者 3. 消費者 二、死信隊列實現 1、代碼編寫 1. 配置類 2. 生產者 3. 消費者 三、踩坑記錄 1、發送消息失敗 2、消息過期后未能轉…

    深度學習在股票量化中的應用

    深度學習在股票量化中的具體應用:從時間序列預測到Alpha挖掘深度學習并非量化交易的銀彈,但它是一套強大的工具集,能夠解決傳統量化方法難以處理的復雜問題。其核心價值在于從海量、高維、非結構化的數據中自動提取有效特征并發現非線性關系。…

    Web 安全之 HTTP 響應截斷攻擊詳解

    這不是危言聳聽。 在一次安全審計中,某電商平臺發現: 用戶訪問首頁后,自動跳轉到了賭博網站。 但代碼沒被篡改,服務器沒被入侵,日志一切正常。 最終追查發現—— 罪魁禍首,竟是一個 %0d%0a(回車…

    Envoy配置ext_proc

    介紹 本文將使用gateway api inference extension作為envoy的ext_proc服務端 啟動Ext_Proc 基于Gateway API Inference Extension https://github.com/kubernetes-sigs/gateway-api-inference-extension.git 先clone代碼到本地 git clone https://github.com/kubernetes-…

    echarts關系圖(Vue3)

    基礎版效果圖&#xff1a;后期請求接口&#xff0c;接入數據即可用<template><div><v-chartref"vChartRef":option"option"style"width: 100%; height: 800px"></v-chart></div> </template><script lan…

    【LeetCode】17. 電話號碼的字母組合

    文章目錄17. 電話號碼的字母組合題目描述示例 1&#xff1a;示例 2&#xff1a;示例 3&#xff1a;提示&#xff1a;解題思路算法分析問題本質分析回溯法詳解組合生成過程可視化數字映射關系各種解法對比算法流程圖邊界情況處理時間復雜度分析空間復雜度分析關鍵優化點實際應用…

    全文 part1 - DGEMM Using Tensor Cores, and Its Accurate and Reproducible Versions

    摘要 本文提出了一種在 NVIDIA 圖形處理器&#xff08;GPU&#xff09;的張量核心&#xff08;Tensor Cores&#xff0c;僅含 FP16、INT8 等 GEMM 計算功能&#xff09;上實現 FP64&#xff08;雙精度&#xff0c;DGEMM&#xff09;和 FP32&#xff08;單精度&#xff0c;SGEMM…

    Hexo 博客圖片托管:告別本地存儲,用 PicGo + GitHub 打造高速穩定圖床

    之前剛開始進行Hexo博客撰寫&#xff0c;圖片都保存在本地Hexo源文件目錄&#xff08;source/images/&#xff09;文件夾&#xff0c;隨著圖片增多&#xff0c;管理起來壓力增大&#xff0c;于是產生了使用圖床&#xff0c;引入外鏈進行圖片存儲的想法 Pros and Cons 提升部署…