最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文帶你詳解Python如何使用Pandas玩轉(zhuǎn)表格數(shù)據(jù)

 更新時(shí)間:2026年03月09日 09:55:02   作者:海天一色y  
Pandas?是?Python?生態(tài)系統(tǒng)中最重要的數(shù)據(jù)分析庫(kù)之一,由?Wes?McKinney?于2008年開(kāi)發(fā),本文將全面介紹Python數(shù)據(jù)分析庫(kù)Pandas的核心功能,有需要的小伙伴可以了解下

一、Pandas 是什么

Pandas 是 Python 生態(tài)系統(tǒng)中最重要的數(shù)據(jù)分析庫(kù)之一,由 Wes McKinney 于2008年開(kāi)發(fā)。它建立在 NumPy 之上,提供了高性能、易用的數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)分析工具,讓處理結(jié)構(gòu)化數(shù)據(jù)變得前所未有的簡(jiǎn)單。

核心定位

  • 數(shù)據(jù)清洗:處理缺失值、重復(fù)數(shù)據(jù)、格式轉(zhuǎn)換
  • 數(shù)據(jù)轉(zhuǎn)換:合并、重塑、透 視表
  • 數(shù)據(jù)分析:分組統(tǒng)計(jì)、時(shí)間序列分析
  • 數(shù)據(jù)可視化:與 Matplotlib/Seaborn 無(wú)縫集成

二、核心數(shù)據(jù)結(jié)構(gòu)

Pandas 提供兩種主要的數(shù)據(jù)結(jié)構(gòu),理解它們是掌握 Pandas 的關(guān)鍵。

2.1 Series(一維數(shù)據(jù))

Series 是帶標(biāo)簽的一維數(shù)組,可以存儲(chǔ)任意數(shù)據(jù)類型。

  import pandas as pd
  import numpy as np
  ?
  # 創(chuàng)建 Series
  s = pd.Series([1, 3, 5, np.nan, 6, 8])
  print(s)

輸出:

0    1.0
  1    3.0
  2    5.0
  3    NaN
  4    6.0
  5    8.0
  dtype: float64

關(guān)鍵特性:

  • 自動(dòng)索引(0,1,2...)或自定義索引
  • 支持缺失值(NaN)
  • 支持向量化運(yùn)算

2.2 DataFrame(二維數(shù)據(jù))

DataFrame 是帶標(biāo)簽的二維表格數(shù)據(jù)結(jié)構(gòu),是 Pandas 最常用的對(duì)象。

 # 創(chuàng)建 DataFrame
  dates = pd.date_range('20260101', periods=6)
  df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
  ?
  print(df)

輸出:

                    A         B         C         D
  2026-01-01  0.469112 -0.282863 -1.509059 -1.135632
  2026-01-02  1.212112 -0.173215  0.119209 -1.044236
  ...

DataFrame 構(gòu)成要素:

組件說(shuō)明
index行標(biāo)簽(行索引)
columns列標(biāo)簽(列名)
values底層 NumPy 數(shù)組
dtypes每列的數(shù)據(jù)類型

三、數(shù)據(jù)讀取與寫入

Pandas 支持幾乎所有主流數(shù)據(jù)格式:

 # CSV 文件
  df = pd.read_csv('data.csv')
  df.to_csv('output.csv', index=False)
  ?
  # Excel 文件
  df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
  df.to_excel('output.xlsx', sheet_name='Sheet1')
  ?
  # SQL 數(shù)據(jù)庫(kù)
  from sqlalchemy import create_engine
  engine = create_engine('sqlite:///:memory:')
  df.to_sql('my_table', engine)
  ?
  # JSON 數(shù)據(jù)
  df = pd.read_json('data.json')
  ?
  # 從字典創(chuàng)建
  data = {'name': ['Alice', 'Bob'], 'age': [25, 30]}
  df = pd.DataFrame(data)

四、數(shù)據(jù)查看與選擇

4.1 基礎(chǔ)查看

 df.head(5)        # 前5行
  df.tail(3)        # 后3行
  df.shape          # 維度 (行數(shù), 列數(shù))
  df.columns        # 列名
  df.index          # 索引
  df.describe()     # 統(tǒng)計(jì)摘要
  df.info()         # 詳細(xì)信息

4.2 數(shù)據(jù)選擇

Pandas 提供多種選擇數(shù)據(jù)的方式,推薦使用 .loc.iloc

 # 按列選擇
  df['A']           # 選擇單列,返回 Series
  df[['A', 'B']]    # 選擇多列,返回 DataFrame
  ?
  # 按行選擇(不推薦直接用索引)
  df[0:3]           # 切片選擇前3行
  ?
  # 標(biāo)簽選擇 .loc[]
  df.loc['20260101']                    # 選擇單行
  df.loc[:, ['A', 'B']]                 # 選擇多列
  df.loc['20260101':'20260103', 'A':'C'] # 行列切片
  ?
  # 位置選擇 .iloc[]
  df.iloc[3]                            # 第4行(從0開(kāi)始)
  df.iloc[3:5, 0:2]                     # 行3-4,列0-1
  df.iloc[[1, 2, 4], [0, 2]]            # 特定行列
  ?
  # 布爾索引(條件篩選)
  df[df['A'] > 0]                       # A列大于0的行
  df[(df['A'] > 0) & (df['B'] < 0)]     # 多條件組合
  df[df['A'].isin([1, 2, 3])]           # 包含判斷

五、數(shù)據(jù)清洗(Data Cleaning)

真實(shí)數(shù)據(jù)往往 messy,Pandas 提供了強(qiáng)大的清洗工具:

5.1 處理缺失值

 # 檢測(cè)缺失值
  df.isnull()           # 返回布爾矩陣
  df.isnull().sum()     # 每列缺失值計(jì)數(shù)
  ?
  # 刪除缺失值
  df.dropna()           # 刪除包含NaN的行
  df.dropna(axis=1)     # 刪除包含NaN的列
  df.dropna(how='all')  # 只刪除全為NaN的行
  ?
  # 填充缺失值
  df.fillna(0)                    # 用0填充
  df.fillna(df.mean())            # 用均值填充
  df.fillna(method='ffill')       # 前向填充
  df.fillna(method='bfill')       # 后向填充
  df.interpolate()                # 插值填充

5.2 處理重復(fù)值

 df.duplicated()       # 檢測(cè)重復(fù)行
  df.drop_duplicates()  # 刪除重復(fù)行
  df.drop_duplicates(subset=['A', 'B'], keep='last')  # 基于特定列

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

 df['A'].astype(float)           # 轉(zhuǎn)換為浮點(diǎn)型
  df['B'].astype('category')      # 轉(zhuǎn)換為類別型(節(jié)省內(nèi)存)
  pd.to_datetime(df['date'])      # 轉(zhuǎn)換為日期時(shí)間
  pd.to_numeric(df['col'], errors='coerce')  # 強(qiáng)制轉(zhuǎn)換,無(wú)效值變NaN

5.4 字符串處理

 df['name'].str.lower()          # 轉(zhuǎn)小寫
  df['name'].str.contains('John') # 包含判斷
  df['name'].str.replace('a', 'b')# 替換
  df['email'].str.split('@')      # 分割
  df['name'].str[:3]              # 切片

六、數(shù)據(jù)轉(zhuǎn)換與重塑

6.1 應(yīng)用函數(shù)

 # apply:沿軸應(yīng)用函數(shù)
  df.apply(np.cumsum)             # 累積和
  df.apply(lambda x: x.max() - x.min())  # 極差
  ?
  # applymap:逐元素應(yīng)用(僅DataFrame)
  df.applymap(lambda x: len(str(x)))
  ?
  # map:僅用于 Series
  df['A'].map(lambda x: x**2)

6.2 數(shù)據(jù)合并

 # concat:軸向連接
  pd.concat([df1, df2])           # 縱向拼接(行)
  pd.concat([df1, df2], axis=1)   # 橫向拼接(列)
  ?
  # merge:數(shù)據(jù)庫(kù)風(fēng)格的合并
  pd.merge(df1, df2, on='key')                    # 內(nèi)連接
  pd.merge(df1, df2, on='key', how='left')        # 左連接
  pd.merge(df1, df2, left_on='lkey', right_on='rkey')  # 不同鍵名
  ?
  # join:基于索引合并
  df1.join(df2, how='outer')

6.3 數(shù)據(jù)重塑

 # pivot:透 視表
  df.pivot(index='date', columns='variable', values='value')
  ?
  # melt:寬格式轉(zhuǎn)長(zhǎng)格式
  pd.melt(df, id_vars=['id'], value_vars=['A', 'B'])
  ?
  # stack/unstack:層級(jí)索引操作
  df.stack()                      # 列旋轉(zhuǎn)為行
  df.unstack()                    # 行旋轉(zhuǎn)為列
  ?
  # pivot_table:高級(jí)透 視表
  df.pivot_table(values='D', index='A', columns='B', aggfunc=np.sum)

七、分組與聚合(GroupBy)

這是 Pandas 最強(qiáng)大的功能之一,遵循 Split-Apply-Combine 策略:

 # 基礎(chǔ)分組
  df.groupby('A').sum()           # 按A分組求和
  df.groupby(['A', 'B']).mean()   # 多列分組求均值
  ?
  # 多聚合操作
  df.groupby('A').agg({
      'B': ['min', 'max', 'mean'],
      'C': 'sum'
  })
  ?
  # 轉(zhuǎn)換(保持原形狀)
  df.groupby('A').transform(lambda x: (x - x.mean()) / x.std())
  ?
  # 過(guò)濾
  df.groupby('A').filter(lambda x: x['B'].sum() > 100)
  ?
  # apply:自定義操作
  df.groupby('A').apply(lambda x: x.sort_values('B').iloc[0])

八、時(shí)間序列處理

Pandas 最初就是為金融時(shí)間序列分析設(shè)計(jì)的:

 # 創(chuàng)建時(shí)間范圍
  rng = pd.date_range('2026-01-01', periods=100, freq='D')  # 日頻
  rng = pd.date_range('2026-01-01', periods=12, freq='M')   # 月頻
  ?
  # 時(shí)間索引
  ts = pd.Series(np.random.randn(len(rng)), index=rng)
  ?
  # 重采樣(Resampling)
  ts.resample('M').mean()         # 降采樣:月均值
  ts.resample('D').interpolate()  # 升采樣:插值
  ?
  # 移動(dòng)窗口
  ts.rolling(window=7).mean()     # 7日移動(dòng)平均
  ts.expanding().sum()            # 擴(kuò)展窗口求和
  ?
  # 時(shí)間偏移
  ts.shift(1)                     # 滯后1期
  ts.shift(-1)                    # 超前1期
  ?
  # 時(shí)區(qū)處理
  ts_utc = ts.tz_localize('UTC')
  ts_sh = ts_utc.tz_convert('Asia/Shanghai')

九、性能優(yōu)化技巧

9.1 內(nèi)存優(yōu)化

 # 查看內(nèi)存使用
  df.info(memory_usage='deep')
  ?
  # 優(yōu)化數(shù)據(jù)類型
  df['int_col'] = df['int_col'].astype('int32')      # 默認(rèn) int64 → int32
  df['float_col'] = df['float_col'].astype('float32')
  df['category_col'] = df['category_col'].astype('category')  # 類別型

9.2 向量化操作

避免循環(huán),使用向量化操作:

 # ? 慢:Python 循環(huán)
  result = []
  for idx, row in df.iterrows():
      result.append(row['A'] + row['B'])
  ?
  # ? 快:向量化
  result = df['A'] + df['B']
  ?
  # ? 更快:NumPy 底層
  result = df['A'].values + df['B'].values

9.3 使用 eval/query

 # 大型 DataFrame 的表達(dá)式計(jì)算
  df.eval('C = A + B', inplace=True)
  df.query('A > 0 and B < 0')

思考題:在處理一個(gè) 10GB 的 CSV 文件時(shí),如何在不耗盡內(nèi)存的情況下計(jì)算某列的均值?(提示:考慮 chunksize 參數(shù)或 Dask)

十、實(shí)戰(zhàn)案例:數(shù)據(jù)分析流程

下面是一個(gè)完整的數(shù)據(jù)分析流程示例:

 import pandas as pd
  import numpy as np
  ?
  # 1. 加載數(shù)據(jù)
  df = pd.read_csv('sales_data.csv', parse_dates=['date'])
  ?
  # 2. 數(shù)據(jù)清洗
  df.drop_duplicates(inplace=True)
  df.dropna(subset=['sales', 'quantity'], inplace=True)
  df['category'] = df['category'].astype('category')
  ?
  # 3. 特征工程
  df['revenue'] = df['sales'] * df['quantity']
  df['month'] = df['date'].dt.to_period('M')
  ?
  # 4. 數(shù)據(jù)分析
  monthly_sales = df.groupby('month')['revenue'].sum()
  category_stats = df.groupby('category').agg({
      'revenue': ['sum', 'mean', 'count'],
      'quantity': 'sum'
  })
  ?
  # 5. 透 視分析
  pivot = df.pivot_table(
      values='revenue', 
      index='month', 
      columns='category', 
      aggfunc='sum',
      fill_value=0
  )
  ?
  # 6. 導(dǎo)出結(jié)果
  monthly_sales.to_csv('monthly_report.csv')
  category_stats.to_excel('category_report.xlsx')

十一、Pandas 3.0 新特性(2024+)

Pandas 3.0 帶來(lái)了重大更新:

  • PyArrow 后端:默認(rèn)使用 PyArrow 字符串類型,大幅減少內(nèi)存占用
  • Copy-on-Write:默認(rèn)啟用,避免意外的數(shù)據(jù)修改
  • 改進(jìn)的異常信息:更清晰的錯(cuò)誤提示
  • 棄用警告:移除舊版棄用功能
 # 啟用 PyArrow 后端(推薦)
  df = pd.read_csv('data.csv', dtype_backend='pyarrow')

十二、學(xué)習(xí)資源推薦

資源鏈接說(shuō)明
官方文檔pandas.pydata.org最權(quán)威參考
Pandas CookbookGitHub 搜索實(shí)戰(zhàn)技巧合集
《Python for Data Analysis》Wes McKinney 著作者親著
Kaggle Learnkaggle.com/learn免費(fèi)交互課程

Pandas 是 Python 數(shù)據(jù)科學(xué)生態(tài)的基石,掌握它需要:

  • 理解數(shù)據(jù)結(jié)構(gòu):Series 和 DataFrame 的本質(zhì)
  • 熟練選擇數(shù)據(jù):loc/iloc 的區(qū)別與應(yīng)用場(chǎng)景
  • 掌握清洗技巧:處理真實(shí)世界的臟數(shù)據(jù)
  • 善用分組聚合:高效的數(shù)據(jù)匯總分析
  • 注意性能優(yōu)化:避免低效循環(huán),善用向量化

最佳實(shí)踐建議:

  • 始終使用 .loc.iloc 而不是鏈?zhǔn)剿饕?code>df[...][...])
  • 處理大型數(shù)據(jù)集時(shí)考慮使用 PyArrow 或 Dask
  • 善用 inplace=True 減少內(nèi)存拷貝(但要注意副作用)
  • 代碼中保留數(shù)據(jù)處理的注釋,便于復(fù)現(xiàn)分析流程

到此這篇關(guān)于一文帶你詳解Python如何使用Pandas玩轉(zhuǎn)表格數(shù)據(jù)的文章就介紹到這了,更多相關(guān)Python Pandas數(shù)據(jù)分析內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python如何利用Har文件進(jìn)行遍歷指定字典替換提交的數(shù)據(jù)詳解

    Python如何利用Har文件進(jìn)行遍歷指定字典替換提交的數(shù)據(jù)詳解

    這篇文章主要給大家介紹了關(guān)于Python如何利用Har文件進(jìn)行遍歷指定字典替換提交的數(shù)據(jù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Python入門教程(八)PythonCasting用法

    Python入門教程(八)PythonCasting用法

    這篇文章主要介紹了Python入門教程(八)PythonCasting用法,Python是一門非常強(qiáng)大好用的語(yǔ)言,也有著易上手的特性,本文為入門教程,需要的朋友可以參考下
    2023-04-04
  • python程序封裝為win32服務(wù)的方法

    python程序封裝為win32服務(wù)的方法

    這篇文章主要為大家詳細(xì)介紹了python程序封裝為win32服務(wù)的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Python中matplotlib庫(kù)安裝失敗的經(jīng)驗(yàn)總結(jié)(附pycharm配置anaconda)

    Python中matplotlib庫(kù)安裝失敗的經(jīng)驗(yàn)總結(jié)(附pycharm配置anaconda)

    最近根據(jù)領(lǐng)導(dǎo)布置的學(xué)習(xí)任務(wù),開(kāi)始學(xué)習(xí)python中的matplotlib,朋友告訴我這個(gè)很簡(jiǎn)單,然而剛踏入安裝的門檻,就遇到了安裝不成功的問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于Python中matplotlib庫(kù)安裝失敗的經(jīng)驗(yàn)總結(jié),需要的朋友可以參考下
    2022-08-08
  • 關(guān)于python實(shí)現(xiàn)requests接口測(cè)試的問(wèn)題

    關(guān)于python實(shí)現(xiàn)requests接口測(cè)試的問(wèn)題

    requests是一個(gè)很實(shí)用的Python HTTP客戶端庫(kù),Requests是Python語(yǔ)言的第三方的庫(kù),專門用于發(fā)送HTTP請(qǐng)求,這篇文章主要介紹了python實(shí)現(xiàn)requests接口測(cè)試,需要的朋友可以參考下
    2021-10-10
  • Python打包成.exe可執(zhí)行文件的詳細(xì)步驟

    Python打包成.exe可執(zhí)行文件的詳細(xì)步驟

    在Python中,可以使用一些工具將Python代碼打包成可執(zhí)行文件(.exe)以便在沒(méi)有安裝Python解釋器的環(huán)境中運(yùn)行,本文通過(guò)圖文結(jié)合的方式給大家詳細(xì)介紹了Python打包成.exe可執(zhí)行文件的步驟,需要的朋友可以參考下
    2024-04-04
  • python使用Berkeley DB數(shù)據(jù)庫(kù)實(shí)例

    python使用Berkeley DB數(shù)據(jù)庫(kù)實(shí)例

    這篇文章主要介紹了python使用Berkeley DB數(shù)據(jù)庫(kù)的方法,以實(shí)例形式講述了完整的操作過(guò)程,并總結(jié)了具體的操作步驟,非常具有實(shí)用性,需要的朋友可以參考下
    2014-09-09
  • 利用python在excel里面直接使用sql函數(shù)的方法

    利用python在excel里面直接使用sql函數(shù)的方法

    今天小編就為大家分享一篇利用python在excel里面直接使用sql函數(shù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • Python Django教程之實(shí)現(xiàn)天氣應(yīng)用程序

    Python Django教程之實(shí)現(xiàn)天氣應(yīng)用程序

    Django提供了一個(gè)基于Python Web框架的Web框架,允許快速開(kāi)發(fā)和干凈,務(wù)實(shí)的設(shè)計(jì)。在本教程中,我們將學(xué)習(xí)如何創(chuàng)建一個(gè)使用Django作為后端的天氣應(yīng)用程序,感興趣的可以嘗試一下
    2022-10-10
  • 教你如何用python爬取王者榮耀月收入流水線

    教你如何用python爬取王者榮耀月收入流水線

    這篇文章主要介紹了教你如何用python爬取王者榮耀月收入流水線,對(duì)正在學(xué)習(xí)python的小伙伴們有一定的幫助,需要的朋友可以參考下
    2021-04-04

最新評(píng)論

平山县| 昌乐县| 南汇区| 和顺县| 永修县| 江北区| 湘潭市| 江山市| 太湖县| 祁阳县| 乐平市| 墨玉县| 高唐县| 建阳市| 精河县| 洮南市| 张掖市| 腾冲县| 四会市| 昆山市| 万源市| 达拉特旗| 盐城市| 关岭| 泗水县| 天台县| 丹江口市| 临高县| 玉林市| 青冈县| 威信县| 景宁| 东兴市| 威宁| 镶黄旗| 乐清市| 兴国县| 唐河县| 区。| 永康市| 长葛市|