根据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表头、列号读取数据的实现的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did17339