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

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

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

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

一、CSV模塊簡介

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

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被錯(cuò)誤的分成了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)

在這里插入圖片描述

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

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

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

二、用法示例

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

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

對(duì)于文件salary.csv,過濾出salary列大于1000的行,并寫入results.csv。由于原數(shù)據(jù)類型為字符串且包含逗號(hào),所以需要先去除值里的逗號(hào),最后用float函數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)與1000進(jìn)行比較。篩選出符合條件的數(shù)據(jù)后調(diào)用writer對(duì)象上的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=',')    # 默認(rèn)分隔符就是逗號(hào),delimiter=','也可省略
        writer = csv.writer(fo)
        header = next(reader)    # 讀取第一行標(biāo)題
        print(header)
        writer.writerow(header)    # 先將標(biāo)題寫入文件
        for row in reader:
            salary = float(row[3].replace(',', ''))    # 去除逗號(hào)并轉(zhuǎn)換為float型
            if salary > 1000:
                print(row)
                writer.writerow(row)

在這里插入圖片描述

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

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

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

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=',')    # 默認(rèn)分隔符就是逗號(hào),delimeter=','也可省略
        writer = csv.writer(fo)
        header = next(reader)    # 讀取第一行標(biāo)題
        print(header)
        writer.writerow(header)    # 先將標(biāo)題寫入文件
        
        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三列。處理思路為通過標(biāo)題先將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=',')    # 默認(rèn)分隔符就是逗號(hào),delimiter=','也可省略
        writer = csv.writer(fo)
        header = next(reader)    # 讀取第一行標(biāo)題

        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)    # 先將標(biāo)題寫入文件

        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ù)的實(shí)現(xiàn)實(shí)例的文章就介紹到這了,更多相關(guān)Python CSV模塊處理數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 使用Python操作PDF文件

    使用Python操作PDF文件

    這篇文章介紹了Python操作PDF文件的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    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 項(xiàng)目中,我們經(jīng)常需要導(dǎo)入許多庫來完成各種任務(wù),NumPy 作為一個(gè)核心的科學(xué)計(jì)算庫,被廣泛應(yīng)用于數(shù)據(jù)處理和分析,然而,有時(shí)我們會(huì)遇到 NumPy 重載的警告,本文將詳細(xì)講解這一警告的原因,并提供解決方案,需要的朋友可以參考下
    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判斷文本中消息重復(fù)次數(shù)的方法

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

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

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

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

    使用Python自動(dòng)化處理Excel表格的操作方法

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

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

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

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

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

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

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

最新評(píng)論

额济纳旗| 潢川县| 金门县| 左云县| 佛坪县| 萨嘎县| 云阳县| 济南市| 阿拉善左旗| 永济市| 灌阳县| 娱乐| 湖南省| 鹤峰县| 历史| 大冶市| 永新县| 永仁县| 石泉县| 石景山区| 普兰县| 金堂县| 苗栗县| 灵石县| 房产| 潢川县| 松溪县| 兴义市| 郁南县| 平舆县| 临桂县| 泗水县| 乐都县| 铜山县| 蕉岭县| 深圳市| 新沂市| 涟源市| 香港 | 延庆县| 永和县|