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

Python讀取CSV的四種方式實現(xiàn)與對比

 更新時間:2025年08月26日 09:54:49   作者:小莊-Python辦公  
CSV(Comma-Separated Values)是一種常見的數(shù)據(jù)交換格式,Python提供了多種讀取CSV文件的方法,下面就跟隨小編一起詳細一下具體的實現(xiàn)方法吧

概述

CSV(Comma-Separated Values)是一種常見的數(shù)據(jù)交換格式。Python提供了多種讀取CSV文件的方法,每種方法都有其特點和適用場景。

方法一:使用csv模塊(內(nèi)置)

1.1 csv.reader()

import csv

with open('data.csv', 'r', encoding='utf-8') as file:
    csv_reader = csv.reader(file)
    headers = next(csv_reader)  # 讀取表頭
    for row in csv_reader:
        print(row)  # 每行是一個列表

特點:

  • Python內(nèi)置,無需安裝額外庫
  • 內(nèi)存占用小,適合大文件
  • 逐行讀取,節(jié)省內(nèi)存
  • 功能相對簡單

1.2 csv.DictReader()

import csv

with open('data.csv', 'r', encoding='utf-8') as file:
    csv_reader = csv.DictReader(file)
    for row in csv_reader:
        print(row['column_name'])  # 通過列名訪問

特點:

  • 可以通過列名訪問數(shù)據(jù)
  • 代碼更易讀
  • 內(nèi)存占用比reader()稍大

方法二:使用pandas庫

2.1 基本用法

import pandas as pd

df = pd.read_csv('data.csv')
print(df.head())  # 顯示前5行

2.2 高級參數(shù)

df = pd.read_csv(
    'data.csv',
    encoding='utf-8',           # 編碼
    sep=',',                    # 分隔符
    header=0,                   # 表頭行
    index_col=0,                # 索引列
    usecols=['col1', 'col2'],   # 指定列
    nrows=1000,                 # 讀取行數(shù)
    skiprows=1,                 # 跳過行數(shù)
    na_values=['NULL', ''],     # 空值標識
    dtype={'col1': str}         # 數(shù)據(jù)類型
)

特點:

  • 功能強大,參數(shù)豐富
  • 支持數(shù)據(jù)分析和處理
  • 與其他數(shù)據(jù)科學庫集成好
  • 需要安裝pandas
  • 內(nèi)存占用較大

方法三:使用numpy庫

3.1 numpy.loadtxt()

import numpy as np

# 適用于純數(shù)值數(shù)據(jù)
data = np.loadtxt('data.csv', delimiter=',', skiprows=1)

3.2 numpy.genfromtxt()

import numpy as np

data = np.genfromtxt(
    'data.csv',
    delimiter=',',
    names=True,              # 使用第一行作為列名
    dtype=None,              # 自動推斷類型
    encoding='utf-8'
)

特點:

  • 處理數(shù)值數(shù)據(jù)性能高
  • 內(nèi)存效率好
  • 主要適用于數(shù)值數(shù)據(jù)
  • 文本處理能力有限

方法四:手動解析

with open('data.csv', 'r', encoding='utf-8') as file:
    lines = file.readlines()

headers = lines[0].strip().split(',')
data = []
for line in lines[1:]:
    row = line.strip().split(',')
    data.append(row)

特點:

  • 完全可控,靈活性高
  • 可處理特殊格式
  • 代碼復(fù)雜,容易出錯
  • 需要處理各種邊界情況

特殊情況處理

處理編碼問題

def read_csv_auto_encoding(filename):
    encodings = ['utf-8', 'gbk', 'gb2312', 'utf-16']
    for encoding in encodings:
        try:
            return pd.read_csv(filename, encoding=encoding)
        except UnicodeDecodeError:
            continue
    return None

處理大文件(分塊讀?。?/h3>
chunk_list = []
for chunk in pd.read_csv('large_file.csv', chunksize=1000):
    # 處理每個塊
    chunk_list.append(chunk)

df = pd.concat(chunk_list, ignore_index=True)

處理復(fù)雜CSV(包含引號、逗號)

import csv

with open('complex.csv', 'r') as file:
    reader = csv.reader(file, quotechar='"', delimiter=',', quoting=csv.QUOTE_ALL)
    for row in reader:
        print(row)

方法選擇指南

場景推薦方法理由
數(shù)據(jù)分析pandas功能強大,生態(tài)完善
簡單讀取csv模塊內(nèi)置庫,輕量級
數(shù)值計算numpy性能優(yōu)秀
大文件處理csv模塊 + 逐行處理內(nèi)存友好
特殊格式手動解析靈活可控
快速原型pandas開發(fā)效率高

性能對比

方法內(nèi)存占用處理速度功能豐富度學習成本
csv模塊
pandas
numpy
手動解析自定義

最佳實踐

優(yōu)先使用pandas:除非有特殊需求,pandas是最佳選擇

注意編碼問題:中文數(shù)據(jù)常用utf-8或gbk編碼

處理大文件:使用分塊讀取或csv模塊

數(shù)據(jù)驗證:讀取后檢查數(shù)據(jù)完整性

異常處理:添加適當?shù)腻e誤處理機制

示例代碼

# Python讀取CSV的幾種方式

# 1. 使用csv模塊(Python內(nèi)置)
import csv

# 方法1.1: 使用csv.reader()讀取
def read_csv_with_reader(filename):
    """
    使用csv.reader()逐行讀取CSV文件
    適用于:簡單的CSV文件讀取,內(nèi)存占用小
    """
    with open(filename, 'r', encoding='utf-8') as file:
        csv_reader = csv.reader(file)
        # 讀取表頭
        headers = next(csv_reader)
        print(f"表頭: {headers}")
        
        # 讀取數(shù)據(jù)行
        for row in csv_reader:
            print(row)

# 方法1.2: 使用csv.DictReader()讀取
def read_csv_with_dictreader(filename):
    """
    使用csv.DictReader()將每行轉(zhuǎn)換為字典
    適用于:需要按列名訪問數(shù)據(jù)的場景
    """
    with open(filename, 'r', encoding='utf-8') as file:
        csv_reader = csv.DictReader(file)
        for row in csv_reader:
            print(row)  # 每行是一個字典
            # 可以通過列名訪問:row['column_name']

# 2. 使用pandas庫(需要安裝:pip install pandas)
import pandas as pd

# 方法2.1: 基本讀取
def read_csv_with_pandas_basic(filename):
    """
    使用pandas讀取CSV文件
    適用于:數(shù)據(jù)分析、處理大量數(shù)據(jù)
    """
    df = pd.read_csv(filename)
    print(df.head())  # 顯示前5行
    return df

# 方法2.2: 帶參數(shù)的讀取
def read_csv_with_pandas_advanced(filename):
    """
    使用pandas的高級參數(shù)讀取CSV
    """
    df = pd.read_csv(
        filename,
        encoding='utf-8',      # 指定編碼
        sep=',',               # 分隔符
        header=0,              # 表頭行號
        index_col=0,           # 索引列
        usecols=['col1', 'col2'],  # 只讀取指定列
        nrows=1000,            # 只讀取前1000行
        skiprows=1,            # 跳過第1行
        na_values=['NULL', ''],  # 指定空值表示
        dtype={'col1': str}    # 指定列的數(shù)據(jù)類型
    )
    return df

# 3. 使用numpy庫(需要安裝:pip install numpy)
import numpy as np

# 方法3.1: 使用numpy.loadtxt()
def read_csv_with_numpy_loadtxt(filename):
    """
    使用numpy.loadtxt()讀取數(shù)值型CSV
    適用于:純數(shù)值數(shù)據(jù),性能要求高
    """
    data = np.loadtxt(filename, delimiter=',', skiprows=1)  # 跳過表頭
    return data

# 方法3.2: 使用numpy.genfromtxt()
def read_csv_with_numpy_genfromtxt(filename):
    """
    使用numpy.genfromtxt()讀取CSV(更靈活)
    適用于:包含缺失值的數(shù)值數(shù)據(jù)
    """
    data = np.genfromtxt(
        filename,
        delimiter=',',
        names=True,           # 第一行作為列名
        dtype=None,           # 自動推斷數(shù)據(jù)類型
        encoding='utf-8',
        missing_values='',    # 缺失值標識
        filling_values=0      # 缺失值填充
    )
    return data

# 4. 使用內(nèi)置open()函數(shù)手動解析
def read_csv_manually(filename):
    """
    手動解析CSV文件
    適用于:特殊格式的CSV或需要自定義解析邏輯
    """
    with open(filename, 'r', encoding='utf-8') as file:
        lines = file.readlines()
        
    # 解析表頭
    headers = lines[0].strip().split(',')
    
    # 解析數(shù)據(jù)
    data = []
    for line in lines[1:]:
        row = line.strip().split(',')
        data.append(row)
    
    return headers, data

# 5. 處理特殊情況的CSV

# 方法5.1: 處理不同編碼的CSV
def read_csv_different_encoding(filename):
    """
    處理不同編碼的CSV文件
    """
    encodings = ['utf-8', 'gbk', 'gb2312', 'utf-16']
    
    for encoding in encodings:
        try:
            df = pd.read_csv(filename, encoding=encoding)
            print(f"成功使用 {encoding} 編碼讀取文件")
            return df
        except UnicodeDecodeError:
            continue
    
    print("無法確定文件編碼")
    return None

# 方法5.2: 處理大文件(分塊讀?。?
def read_large_csv_in_chunks(filename, chunk_size=1000):
    """
    分塊讀取大型CSV文件
    適用于:內(nèi)存不足以加載整個文件的情況
    """
    chunk_list = []
    
    for chunk in pd.read_csv(filename, chunksize=chunk_size):
        # 對每個塊進行處理
        processed_chunk = chunk  # 這里可以添加處理邏輯
        chunk_list.append(processed_chunk)
    
    # 合并所有塊
    df = pd.concat(chunk_list, ignore_index=True)
    return df

# 方法5.3: 處理包含引號和逗號的CSV
def read_csv_with_quotes(filename):
    """
    處理包含引號和逗號的復(fù)雜CSV
    """
    with open(filename, 'r', encoding='utf-8') as file:
        csv_reader = csv.reader(file, quotechar='"', delimiter=',', quoting=csv.QUOTE_ALL)
        for row in csv_reader:
            print(row)

# 使用示例
if __name__ == "__main__":
    # 創(chuàng)建示例CSV文件
    sample_data = '''姓名,年齡,城市,薪資
張三,25,北京,8000
李四,30,上海,12000
王五,28,廣州,10000
趙六,35,深圳,15000'''
    
    with open('sample.csv', 'w', encoding='utf-8') as f:
        f.write(sample_data)
    
    print("=== 方法1: 使用csv.reader() ===")
    read_csv_with_reader('sample.csv')
    
    print("\n=== 方法2: 使用csv.DictReader() ===")
    read_csv_with_dictreader('sample.csv')
    
    print("\n=== 方法3: 使用pandas ===")
    df = read_csv_with_pandas_basic('sample.csv')
    print(df)
    
    print("\n=== 方法4: 手動解析 ===")
    headers, data = read_csv_manually('sample.csv')
    print(f"表頭: {headers}")
    print(f"數(shù)據(jù): {data}")

# 各種方法的對比總結(jié):
"""
1. csv模塊:
   - 優(yōu)點:Python內(nèi)置,無需安裝額外庫,內(nèi)存占用小
   - 缺點:功能相對簡單,不支持復(fù)雜的數(shù)據(jù)操作
   - 適用:簡單的CSV讀取,小文件處理

2. pandas:
   - 優(yōu)點:功能強大,支持數(shù)據(jù)分析和處理,參數(shù)豐富
   - 缺點:需要安裝額外庫,內(nèi)存占用較大
   - 適用:數(shù)據(jù)分析,復(fù)雜的數(shù)據(jù)處理,大部分CSV處理場景

3. numpy:
   - 優(yōu)點:處理數(shù)值數(shù)據(jù)性能高,內(nèi)存效率好
   - 缺點:主要適用于數(shù)值數(shù)據(jù),對文本處理支持有限
   - 適用:純數(shù)值CSV文件,科學計算

4. 手動解析:
   - 優(yōu)點:完全可控,可以處理特殊格式
   - 缺點:代碼復(fù)雜,容易出錯,需要處理各種邊界情況
   - 適用:特殊格式的CSV,需要自定義解析邏輯

選擇建議:
- 數(shù)據(jù)分析:首選pandas
- 簡單讀?。菏褂胏sv模塊
- 數(shù)值計算:考慮numpy
- 特殊需求:手動解析
"""

以上就是Python讀取CSV的四種方式實現(xiàn)與對比的詳細內(nèi)容,更多關(guān)于Python讀取CSV的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 舉例講解Python編程中對線程鎖的使用

    舉例講解Python編程中對線程鎖的使用

    Python的threading模塊中提供了多種鎖的相關(guān)方法,Python的多線程不能同時執(zhí)行,因而鎖的使用非常關(guān)鍵,下面我們就來舉例講解Python編程中對線程鎖的使用:
    2016-07-07
  • Python基于OCR實現(xiàn)圖片識別翻譯工具功能(附源碼)

    Python基于OCR實現(xiàn)圖片識別翻譯工具功能(附源碼)

    這篇文章主要為大家詳細介紹了Python如何通過智能OCR文字識別和精準翻譯技術(shù),實現(xiàn)一鍵截圖翻譯,大幅提升跨語言閱讀效率,讓語言不再成為信息獲取的障礙,感興趣的可以了解下
    2025-11-11
  • matlab和Excel的數(shù)據(jù)交互操作(非xlsread和xlswrite)

    matlab和Excel的數(shù)據(jù)交互操作(非xlsread和xlswrite)

    在使用MATLAB時,可能會遇到很多表格數(shù)據(jù)的處理,有時MATLAB也需要利用現(xiàn)存的表格數(shù)據(jù)實現(xiàn)操作目的,下面這篇文章主要給大家介紹了關(guān)于matlab和Excel的交互操作的相關(guān)資料,非xlsread和xlswrite,需要的朋友可以參考下
    2021-08-08
  • Python 的 f-string 可以連接字符串與數(shù)字的原因解析

    Python 的 f-string 可以連接字符串與數(shù)字的原因解析

    這篇文章主要介紹了Python 的 f-string 可以連接字符串與數(shù)字的原因解析,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Python生成臨時文件和文件夾的幾種方法

    Python生成臨時文件和文件夾的幾種方法

    這篇文章主要介紹了在Python中生成臨時文件和臨時文件夾的方法,包括使用tempfile模塊中的不同函數(shù),以及推薦的做法,需要的朋友可以參考下
    2026-03-03
  • python進階教程之動態(tài)類型詳解

    python進階教程之動態(tài)類型詳解

    這篇文章主要介紹了python進階教程之動態(tài)類型詳解,動態(tài)類型是動態(tài)語言的特性,本文對多種動態(tài)類型應(yīng)用做了講解,需要的朋友可以參考下
    2014-08-08
  • 使用Keras加載含有自定義層或函數(shù)的模型操作

    使用Keras加載含有自定義層或函數(shù)的模型操作

    這篇文章主要介紹了使用Keras加載含有自定義層或函數(shù)的模型操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 將string類型的數(shù)據(jù)類型轉(zhuǎn)換為spark rdd時報錯的解決方法

    將string類型的數(shù)據(jù)類型轉(zhuǎn)換為spark rdd時報錯的解決方法

    今天小編就為大家分享一篇關(guān)于將string類型的數(shù)據(jù)類型轉(zhuǎn)換為spark rdd時報錯的解決方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • matplotlib實戰(zhàn)之餅圖繪制詳解

    matplotlib實戰(zhàn)之餅圖繪制詳解

    餅圖,或稱餅狀圖,是一個劃分為幾個扇形的圓形統(tǒng)計圖表,這篇文章主要為大家詳細介紹了如何使用Matplotlib繪制餅圖,需要的小伙伴可以參考下
    2023-08-08
  • Python中各類Excel表格批量合并問題的實現(xiàn)思路與案例

    Python中各類Excel表格批量合并問題的實現(xiàn)思路與案例

    在日常工作中,可能會遇到各類表格合并的需求。本文主要介紹了Python中各類Excel表格批量合并問題的實現(xiàn)思路與案例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01

最新評論

杭州市| 乌审旗| 余江县| 巴林右旗| 金坛市| 新河县| 吉安县| 东城区| 广饶县| 洛阳市| 错那县| 安泽县| 平定县| 双城市| 朔州市| 仙游县| 宜章县| 祁阳县| 荆州市| 栖霞市| 霍林郭勒市| 裕民县| 三台县| 莱阳市| 南京市| 大姚县| 元阳县| 化州市| 巴林左旗| 综艺| 固原市| 青阳县| 荔波县| 灌南县| 连南| 南宁市| 静海县| 正安县| 怀宁县| 类乌齐县| 丹东市|