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

Python 利用CSV模塊處理數(shù)據(jù)的實現(xiàn)實例

 更新時間:2024年03月17日 10:14:05   作者:V1ncent Chen  
CSV文件的一個主要優(yōu)點是有很多程序可以存儲,轉(zhuǎn)換和處理純文本文件,本文主要介紹了Python 利用CSV模塊處理數(shù)據(jù)的實現(xiàn)實例,具有一定的參考價值,感興趣的可以了解一下

CSV(Comma-Separated Values 逗號分割值)是一種簡單的數(shù)據(jù)存儲與分享方式,和Excel相比,CSV文件的一個主要優(yōu)點是有很多程序可以存儲,轉(zhuǎn)換和處理純文本文件,因此應用場景更加廣泛。

一、CSV模塊簡介

考慮下面的CSV文件:salary.csv。雖然可以使用str.split(‘,’)這樣的方式處理數(shù)據(jù),但是當遇到帶逗號分隔的金額會導致拆分錯誤,除此之外還可能遇到其他各種問題:

id,name,hire_date, salary ,bonus
1,Vincent,2024/1/1," 1,000.00 ",100
2,Victor,2024/1/2," 2,000.00 ",200
3,Grace,2024/1/3," 3,000.00 ",300

使用split拆分代碼如下,金額1,000.00被錯誤的分成了2段:

input_file = 'salary.csv'
with open(input_file, 'r', newline='') as fi:
        header = fi.readline()
        header = header.strip()
        header_list = header.split(',')
        print(header_list)
        for row  in fi:
            field_list = row.strip().split(',')
            print(field_list)

在這里插入圖片描述

對于這類問題,建議選擇標準庫中的CSV模塊來進行處理,CSV模塊被設(shè)計成能夠識別微軟Excel所采用的編碼規(guī)則,可以識別出這種模式并正確的分析數(shù)據(jù)。

CSV模塊常用函數(shù)如下:

  • csv.reader(csvfile, dialect=‘excel’, **fmtparams),返回一個reader對象,通過該對象處理csvfile中的數(shù)據(jù),此函數(shù)用來打開輸入文件。csvfile必須是包含字符串的可迭代對象,通常是文件型對象或列表,如果csvfile是一個文件對象,則打開時應設(shè)置newline=‘’。
  • csv.writer(csvfile, dialect=‘excel’, **fmtparams),返回一個writer對象,該對象負責將數(shù)據(jù)在給定的文件型對象上轉(zhuǎn)換為帶分隔符的字符串,此函數(shù)用來打開輸出文件。如果csvfile是一個文件對象,則打開時應設(shè)置newline=‘’。

二、用法示例

下面兩個示例演示從CSV文件中選取特定的行、列,更復雜的操作都可以在此基礎(chǔ)上進行擴展。

2.1 使用CSV模塊選取特定的行

對于文件salary.csv,過濾出salary列大于1000的行,并寫入results.csv。由于原數(shù)據(jù)類型為字符串且包含逗號,所以需要先去除值里的逗號,最后用float函數(shù)轉(zhuǎn)換為浮點數(shù)與1000進行比較。篩選出符合條件的數(shù)據(jù)后調(diào)用writer對象上的writerow方法逐行寫入results.csv:

import csv
input_file = 'salary.csv'
output_file = 'results.csv'
with open(input_file, 'r', newline='') as fi:
    with open(output_file, 'w', newline='') as fo:
        reader = csv.reader(fi, delimiter=',')    # 默認分隔符就是逗號,delimiter=','也可省略
        writer = csv.writer(fo)
        header = next(reader)    # 讀取第一行標題
        print(header)
        writer.writerow(header)    # 先將標題寫入文件
        for row in reader:
            salary = float(row[3].replace(',', ''))    # 去除逗號并轉(zhuǎn)換為float型
            if salary > 1000:
                print(row)
                writer.writerow(row)

在這里插入圖片描述

這里可以看到CSV模塊可以正確處理金額中的逗號,不會拆分為2段。

2.2 優(yōu)化:通過標題名引用列

上面的示例中,在判斷金額大于1000時,因為要特殊處理,所以我們用row[3]這種索引方式來選取salary列。如果要處理的列很多,那么都通過row[idx]來引用不僅麻煩而且容易搞混淆。這里用命名元組(collections.namedtuple)優(yōu)化一下,命名元組賦予每個位置一個含義,提供可讀性并添加了通過列名獲取值的能力(用索引依然也是可以的)。

import csv
from collections import namedtuple
input_file = 'salary.csv'
output_file = 'results.csv'
with open(input_file, 'r', newline='') as fi:
    with open(output_file, 'w', newline='') as fo:
        reader = csv.reader(fi, delimiter=',')    # 默認分隔符就是逗號,delimeter=','也可省略
        writer = csv.writer(fo)
        header = next(reader)    # 讀取第一行標題
        print(header)
        writer.writerow(header)    # 先將標題寫入文件
        
        namedrow = namedtuple('namedrow', header)    #  命名元組定義
        for row in reader:
            row = namedrow(*row)    # 轉(zhuǎn)換為命名元組
            salary = float(row.salary.replace(',', ''))    # 通過row.salary引用salary列
            if salary > 1000:
                print(row)
                writer.writerow(row)

在這里插入圖片描述

2.3 使用CSV模塊篩選特定的行

現(xiàn)只需要選取id, name, salary三列。處理思路為通過標題先將3列的索引位置保存到列表中,然后在每行循環(huán)中,根據(jù)索引位置只保存這3列數(shù)據(jù):

import csv
input_file = 'salary.csv'
output_file = 'results.csv'
with open(input_file, 'r', newline='') as fi:
    with open(output_file, 'w', newline='') as fo:
        reader = csv.reader(fi, delimiter=',')    # 默認分隔符就是逗號,delimiter=','也可省略
        writer = csv.writer(fo)
        header = next(reader)    # 讀取第一行標題

        columns = ['id', 'name', 'salary']    # 需要的列
        col_idx = []
        for idx in range(len(header)):
            if header[idx] in columns:    # 如果在選取的范圍內(nèi),保存索引
                col_idx.append(idx)               
        writer.writerow(columns)    # 先將標題寫入文件

        for row in reader:
            results = []
            for idx in col_idx:
                results.append(row[idx])    # 通過索引只保留需要的列
            print(results)
            writer.writerow(results)

在這里插入圖片描述

到此這篇關(guān)于Python 利用CSV模塊處理數(shù)據(jù)的實現(xiàn)實例的文章就介紹到這了,更多相關(guān)Python CSV模塊處理數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 使用Python操作PDF文件

    使用Python操作PDF文件

    這篇文章介紹了Python操作PDF文件的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • python/golang 刪除鏈表中的元素

    python/golang 刪除鏈表中的元素

    這篇文章主要介紹了python/golang 如何刪除鏈表中的元素,幫助大家更好的理解和使用python/golang,感興趣的朋友可以了解下
    2020-09-09
  • Python中UserWarning:The NumPy module was reloaded問題的解決方案

    Python中UserWarning:The NumPy module was 

    在 Python 項目中,我們經(jīng)常需要導入許多庫來完成各種任務,NumPy 作為一個核心的科學計算庫,被廣泛應用于數(shù)據(jù)處理和分析,然而,有時我們會遇到 NumPy 重載的警告,本文將詳細講解這一警告的原因,并提供解決方案,需要的朋友可以參考下
    2024-07-07
  • 使用Python爬蟲庫requests發(fā)送表單數(shù)據(jù)和JSON數(shù)據(jù)

    使用Python爬蟲庫requests發(fā)送表單數(shù)據(jù)和JSON數(shù)據(jù)

    今天再為大家介紹下使用Python爬蟲庫requests發(fā)送表單數(shù)據(jù)和JSON數(shù)據(jù)的方法,這是最基本的使用方法,大家可以參考測試下
    2020-01-01
  • Python判斷文本中消息重復次數(shù)的方法

    Python判斷文本中消息重復次數(shù)的方法

    這篇文章主要介紹了Python判斷文本中消息重復次數(shù)的方法,涉及Python針對文本文件的讀取與字符串操作的相關(guān)技巧,需要的朋友可以參考下
    2016-04-04
  • python函數(shù)中return后的語句一定不會執(zhí)行嗎?

    python函數(shù)中return后的語句一定不會執(zhí)行嗎?

    這篇文章主要給大家詳細分析講解了關(guān)于python函數(shù)中return語句后的語句是否一定不會執(zhí)行的相關(guān)資料,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面跟著小編一起來學習學習吧。
    2017-07-07
  • 使用Python自動化處理Excel表格的操作方法

    使用Python自動化處理Excel表格的操作方法

    本文介紹Python操作Excel的多種方法及工具,如xlrd/xlwt/xlutils、openpyxl、xlwings和Pandas,涵蓋讀寫、交互及數(shù)據(jù)分析,并提供實際應用場景,感興趣的朋友跟隨小編一起看看吧
    2025-08-08
  • Python利用PyQT5設(shè)置鬧鐘功能

    Python利用PyQT5設(shè)置鬧鐘功能

    這篇文章主要介紹了通過PyQt5實現(xiàn)設(shè)置一個小鬧鐘的功能,到了設(shè)置的時間后可以響起一段音樂來提醒。感興趣的小伙伴可以跟隨小編一起試一試
    2022-01-01
  • Python找出9個連續(xù)的空閑端口

    Python找出9個連續(xù)的空閑端口

    這篇文章主要介紹了Python找出9個連續(xù)的空閑端口的方法,感興趣的小伙伴們可以參考一下
    2016-02-02
  • 關(guān)于Python不換行輸出和不換行輸出end=““不顯示的問題(親測已解決)

    關(guān)于Python不換行輸出和不換行輸出end=““不顯示的問題(親測已解決)

    這篇文章主要介紹了關(guān)于Python不換行輸出和不換行輸出end=““不顯示的問題(親測已解決),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10

最新評論

永宁县| 安吉县| 邯郸市| 海盐县| 青河县| 江西省| 新津县| 方山县| 沅江市| 镶黄旗| 赤壁市| 大竹县| 玉田县| 柳林县| 永吉县| 峡江县| 岑溪市| 昌宁县| 乡宁县| 靖宇县| 丹阳市| 新乡市| 进贤县| 庐江县| 长丰县| 偃师市| 德兴市| 公主岭市| 安义县| 杨浦区| 东丰县| 青川县| 高台县| 阿勒泰市| 德令哈市| 长治市| 建水县| 大邑县| 莱阳市| 台东县| 安福县|