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

從基礎到高級解析Pandas?DataFrame數據操作的完整指南

 更新時間:2026年02月24日 09:01:31   作者:detayun  
本文系統梳理了Pandas?DataFrame的五大核心操作能力,包括數據訪問、修改、轉換、聚合和高級處理,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下

DataFrame作為Pandas的核心數據結構,其數據操作能力覆蓋了從基礎訪問到高級分析的全場景。本文將系統梳理DataFrame的數據訪問、篩選、轉換、聚合和高級操作五大核心能力,結合代碼示例和性能優(yōu)化技巧,幫助讀者全面掌握這一數據分析利器。

一、數據訪問:精準定位數據的N種方式

1.列訪問:直接索引與屬性訪問

字典式訪問:通過列名直接獲取Series對象

import pandas as pd
df = pd.DataFrame({'A': [1, 2], 'B': ['x', 'y']})
col_a = df['A']  # 返回Series

屬性訪問(僅限列名符合變量命名規(guī)則時):

col_a = df.A  # 等效于df['A'],但列名含空格或特殊字符時會報錯

2.行訪問:標簽索引與位置索引

.loc[]:按標簽索引(包含末端)

df = pd.DataFrame({'A': [1, 2, 3]}, index=['a', 'b', 'c'])
print(df.loc['a':'b'])  # 輸出行'a'和'b'

.iloc[]:按位置索引(不包含末端)

print(df.iloc[0:2])  # 輸出前兩行(位置0和1)

混合索引:同時訪問行和列

print(df.loc['a', 'A'])  # 輸出行'a'列'A'的值(1)
print(df.iloc[0, 0])     # 等效操作(位置索引)

3.條件篩選:布爾索引與查詢函數

布爾索引:通過條件表達式篩選

df = pd.DataFrame({'A': [1, 2, 3], 'B': ['x', 'y', 'z']})
result = df[df['A'] > 1]  # 篩選A列值大于1的行

.query()方法:字符串形式編寫條件(適合復雜條件)

result = df.query('A > 1 and B != "z"')  # 篩選A>1且B≠'z'的行

4.多級索引訪問:Hierarchical Indexing

創(chuàng)建多級索引DataFrame:

arrays = [['A', 'A', 'B', 'B'], [1, 2, 1, 2]]
index = pd.MultiIndex.from_arrays(arrays, names=('Letter', 'Number'))
df = pd.DataFrame({'Data': [10, 20, 30, 40]}, index=index)

訪問特定層級數據:

print(df.loc['A'])          # 篩選Letter='A'的所有行
print(df.loc[('A', 1)])     # 精確篩選Letter='A'且Number=1的行
print(df.xs('A', level='Letter'))  # 使用xs方法按層級篩選

二、數據修改:增刪改查的全流程控制

1.添加數據:列與行的擴展

添加列

df['C'] = [True, False, True]  # 直接賦值
df['D'] = df['A'] * 2          # 通過運算生成新列

添加行

使用loc擴展索引:

df.loc[3] = [4, 'w', False, 8]  # 添加新行(索引為3)

使用append(已棄用,推薦pd.concat):

new_row = pd.DataFrame({'A': [5], 'B': ['v']})
df = pd.concat([df, new_row], ignore_index=True)

2.刪除數據:列與行的移除

刪除列

df.drop('C', axis=1, inplace=True)  # 刪除列'C'

刪除行

df.drop([0, 2], axis=0, inplace=True)  # 刪除索引為0和2的行

條件刪除

df = df[df['A'] != 2]  # 刪除A列值為2的行

3.修改數據:精準更新與批量替換

單值修改

df.loc[0, 'A'] = 100  # 修改索引0行A列的值為100

批量替換

df['A'].replace(100, 1000, inplace=True)  # 將A列所有100替換為1000

按條件替換

df['A'] = df['A'].apply(lambda x: x * 2 if x > 1 else x)  # A列值>1時乘以2

三、數據轉換:重塑與重構數據結構

1.數據透 視:pivot與pivot_table

pivot:將長格式數據轉換為寬格式

data = {'Date': ['2023-01-01', '2023-01-01', '2023-01-02'],
        'Category': ['A', 'B', 'A'],
        'Value': [10, 20, 30]}
df = pd.DataFrame(data)
pivot_df = df.pivot(index='Date', columns='Category', values='Value')

pivot_table:支持聚合的透 視表

pivot_table_df = df.pivot_table(index='Date', columns='Category', values='Value', aggfunc='mean')

2.熔化數據:melt(寬轉長)

melted_df = pd.melt(pivot_df, var_name='Category', value_name='Value')

3.數據合并:merge與join

merge:類似SQL的連接操作

left = pd.DataFrame({'Key': ['A', 'B'], 'Value1': [1, 2]})
right = pd.DataFrame({'Key': ['A', 'B'], 'Value2': [3, 4]})
merged_df = pd.merge(left, right, on='Key', how='inner')  # 內連接

join:基于索引的快速合并

left.set_index('Key', inplace=True)
right.set_index('Key', inplace=True)
joined_df = left.join(right, how='left')  # 左連接

4.數據排序:sort_values與sort_index

按值排序

df.sort_values('A', ascending=False, inplace=True)  # 按A列降序排序

按索引排序

df.sort_index(inplace=True)  # 按行索引排序

四、數據聚合:分組計算與統計分析

1.分組聚合:groupby

基礎分組計算

df = pd.DataFrame({'Category': ['A', 'B', 'A', 'B'],
                   'Value': [10, 20, 30, 40]})
grouped = df.groupby('Category')['Value'].agg(['sum', 'mean', 'count'])

多列分組

df['Subcategory'] = ['X', 'Y', 'X', 'Y']
multi_grouped = df.groupby(['Category', 'Subcategory'])['Value'].sum()

2.窗口函數:rolling與expanding

滾動計算

df = pd.DataFrame({'Value': [1, 2, 3, 4, 5]})
df['Rolling_Mean'] = df['Value'].rolling(window=3).mean()  # 3期移動平均

擴展計算

df['Expanding_Sum'] = df['Value'].expanding().sum()  # 累計求和

3.高級聚合:transform與apply

transform:返回與分組大小相同的Series

df['Group_Mean'] = df.groupby('Category')['Value'].transform('mean')

apply:自定義聚合函數

def custom_agg(x):
    return x.max() - x.min()
df['Value_Range'] = df.groupby('Category')['Value'].apply(custom_agg)

五、高級操作:超越基礎的數據處理

1.時間序列處理

生成時間索引

dates = pd.date_range('2023-01-01', periods=5, freq='D')
df = pd.DataFrame({'Value': [1, 2, 3, 4, 5]}, index=dates)

時間重采樣

df.resample('W').sum()  # 按周匯總

2.文本處理:字符串方法

列級字符串操作

df = pd.DataFrame({'Text': ['apple', 'banana', 'cherry']})
df['Text_Length'] = df['Text'].str.len()  # 計算字符串長度
df['Text_Upper'] = df['Text'].str.upper()  # 轉換為大寫

3.分類數據:astype('category')

轉換為分類類型

df['Category'] = df['Category'].astype('category')

獲取分類信息

print(df['Category'].cat.categories)  # 輸出所有類別
print(df['Category'].cat.codes)      # 輸出類別編碼

4.性能優(yōu)化技巧

使用categorical減少內存

df['Category'] = df['Category'].astype('category')  # 尤其適合低基數列

避免鏈式操作

# 不推薦(可能引發(fā)SettingWithCopyWarning)
df[df['A'] > 1]['B'] = 0

# 推薦
mask = df['A'] > 1
df.loc[mask, 'B'] = 0

使用eval加速計算(適合大型DataFrame):

df.eval('C = A * B', inplace=True)  # 比直接賦值更快

六、總結:DataFrame操作的核心原則

  • 向量化優(yōu)先:盡量避免逐行循環(huán),優(yōu)先使用Pandas內置的向量化操作。
  • 鏈式操作謹慎:復雜的鏈式操作可能引發(fā)警告或錯誤,建議拆分為多步。
  • 內存效率:對大型數據集,優(yōu)先使用categorical類型和chunksize分塊處理。
  • 索引設計:合理設計索引(如時間索引、多級索引)可顯著提升查詢效率。

掌握這些操作后,DataFrame將不再僅僅是數據容器,而是能高效完成數據清洗、轉換、分析和可視化的全能工具。無論是處理百萬級數據集還是復雜分析場景,DataFrame都能通過簡潔的語法實現強大的功能。

以上就是從基礎到高級解析Pandas DataFrame數據操作的完整指南的詳細內容,更多關于Pandas DataFrame數據操作的資料請關注腳本之家其它相關文章!

相關文章

  • Python+OpenCV實戰(zhàn)之利用?K-Means?聚類進行色彩量化

    Python+OpenCV實戰(zhàn)之利用?K-Means?聚類進行色彩量化

    這篇文章主要介紹了如何利用?K-Means?聚類進行色彩量化,以減少圖像中顏色數量。文中的代碼具有一定的學習價值,感興趣的小伙伴可以關注一下
    2021-12-12
  • Python使用百度api做人臉對比的方法

    Python使用百度api做人臉對比的方法

    今天小編就為大家分享一篇Python使用百度api做人臉對比的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python之多線程退出與停止的一種實現思路

    Python之多線程退出與停止的一種實現思路

    這篇文章主要介紹了Python之多線程退出與停止的一種實現思路,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 如何使用Python批量處理Excel和CSV文件

    如何使用Python批量處理Excel和CSV文件

    本文介紹了SQLAlchemyORM的基本用法,包括安裝、核心概念、連接數據庫、定義數據模型、基本CRUD操作、查詢數據、事務管理和最佳實踐等,通過本文,讀者可以掌握使用SQLAlchemy進行高效數據庫操作的方法,感興趣的朋友跟隨小編一起看看吧
    2026-03-03
  • python中自定義異常/raise關鍵字拋出異常的案例解析

    python中自定義異常/raise關鍵字拋出異常的案例解析

    在編程過程中合理的使用異??梢允沟贸绦蛘5膱?zhí)行,本篇文章給大家介紹python中自定義異常/raise關鍵字拋出異常案例解析,需要的朋友可以參考下
    2024-01-01
  • 淺談Python中函數的定義及其調用方法

    淺談Python中函數的定義及其調用方法

    今天小編就為大家分享一篇淺談Python中函數的定義及其調用方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python操作MongoDB數據庫的方法示例

    Python操作MongoDB數據庫的方法示例

    這篇文章主要介紹了Python操作MongoDB數據庫的方法,結合實例形式分析了Python命令行模式下操作MongoDB數據庫實現連接、查找、刪除、排序等相關操作技巧,需要的朋友可以參考下
    2018-01-01
  • 通過shell+python實現企業(yè)微信預警

    通過shell+python實現企業(yè)微信預警

    這篇文章主要介紹了通過shell+python實現企業(yè)微信預警,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • 12步入門Python中的decorator裝飾器使用方法

    12步入門Python中的decorator裝飾器使用方法

    裝飾器的運用是Python編程中的一項高級技巧,這里我們由淺入深,整理了12步入門Python中的decorator裝飾器使用方法,需要的朋友可以參考下
    2016-06-06
  • pytorch預測之解決多次預測結果不一致問題

    pytorch預測之解決多次預測結果不一致問題

    這篇文章主要介紹了pytorch多次預測結果不一致的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06

最新評論

平遥县| 清苑县| 呼和浩特市| 灵丘县| 紫阳县| 昌黎县| 甘谷县| 彰化市| 射洪县| 乌兰县| 乌什县| 东平县| 墨竹工卡县| 鸡泽县| 邵武市| 台州市| 镶黄旗| 汝阳县| 小金县| 随州市| 萨嘎县| 曲沃县| 会泽县| 永泰县| 海阳市| 泉州市| 邵阳县| 六盘水市| 临泉县| 灵宝市| 黄梅县| 广饶县| 虎林市| 农安县| 响水县| 辽阳县| 济宁市| 奈曼旗| 尉犁县| 罗田县| 邵东县|