好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

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

读取csv文件

cvs数据截图如下


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

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

输出结果

根据表头获取列数据

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

输出结果

根据列号读取列数据

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

输出结果

根据index名获取行数据

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

输出结果

根据列号读取行数据

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

输出结果

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]

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

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

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

查看更多关于python 根据csv表头、列号读取数据的实现的详细内容...

  阅读:39次