当前位置:主页 > 软件编程 > Python代码 >

python 根据csv表头、列号读取数据的实现

时间:2023-02-05 09:40:13 | 栏目:Python代码 | 点击:

根据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”

根据这个报错百度了好久,一直没有找到解决方法。

虽然现在最终效果达到了,但是并不清楚具体原因。

源数据表里面问题好多啊,感觉需要先做数据清洗。唉!好难啊!

您可能感兴趣的文章:

相关文章