python 根據csv表頭、列號讀取數據的實現

根據csv表頭、列號讀取數據的實現

讀取csv文件

cvs數據截圖如下

在這裡插入圖片描述

設置index_col=0,目的是設置第一列name為index(索引),方便下面示例演示

data = pandas.read_csv(input1, index_col=0)

輸出結果

        price  o_price  date  quan
name                              
wood    85.00    49.99  2006   797
chair  102.50    49.99  2006   799
bed     77.00    49.99  2006   795
lamp   162.50    49.99  2006   800
sofa   699.99   269.99  2002  3094
table  602.00   269.99  2002  3093

根據表頭獲取列數據

data[['o_price', 'quan']
# 或者
data.loc[:, ['o_price', 'quan']

輸出結果

       o_price  quan
name                
wood     49.99   797
chair    49.99   799
bed      49.99   795
lamp     49.99   800
sofa    269.99  3094
table   269.99  3093

根據列號讀取列數據

data.iloc[:, [3, 4]]

輸出結果

       date  quan
name             
wood   2006   797
chair  2006   799
bed    2006   795
lamp   2006   800
sofa   2002  3094
table  2002  3093

根據index名獲取行數據

data.loc[['wood', 'sofa'], :]

輸出結果

       price  o_price  date  quan
name                             
wood   85.00    49.99  2006   797
sofa  699.99   269.99  2002  3094

根據列號讀取行數據

data.iloc[[0, 1], :]

輸出結果

       price  o_price  date  quan
name                             
wood    85.0    49.99  2006   797
chair  102.5    49.99  2006   799

iloc和loc區別

loc是根據dataframe的具體標簽選取列,而iloc是根據標簽所在的位置,從0開始計數。

讀取csv文件並輸出特定列

其實,最開始好不容易輸出瞭指定列,結果第二天不小心刪瞭什麼東西,然後就一直報錯。

看上去和前一天能正常輸出的沒有什麼差別。折騰瞭一天多總算是找到問題是什麼瞭,是個很簡單的問題。

其實不是錯誤,隻是因為選用的讀取方式不同,所以一直報錯。

源代碼如下

import csv
import pandas as pd 
sheet_name = "員工信息表.csv"
 
#數據文件有問題數據
with open(sheet_name,encoding = "utf-8",errors = "ignore") as f:
    
    #可通過列名讀取列值,表中有空值
    data= csv.DictReader(_.replace("\x00","") for _ in f)
    headers = next(data)
    print(headers)
    for row in data:
        print(row)
        if row['員工狀態'] == '2':
            print(row)
 
    #不可通過列名讀取列值,通過第幾列來讀取
    #data =csv.reader(_.replace("\x00","") for _ in f)
    headers = next(data)
    print(headers)
    for row in data:
        print(row)
        if row[12]=='2':
            print(row)

讀取csv文件需要采用:

with open(sheet_name,encoding = "utf-8",errors = "ignore") as f:

如果不加errors = "ignore"會報錯:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbb in position 0: invalid start byte

通過csv.reader讀取csv文件,然後使用列名row['員工狀態']輸出列值會報錯:

“TypeError: list indices must be integers or slices, not str”

根據這個報錯百度瞭好久,一直沒有找到解決方法。

雖然現在最終效果達到瞭,但是並不清楚具體原因。

源數據表裡面問題好多啊,感覺需要先做數據清洗。唉!好難啊!

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: