python利用numpy模块读取csv文件

Python 专栏收录该内容
5 篇文章 0 订阅

numpy.loadtxt()方法

先来看一下示例CSV数据:
X,Y,NAME,CLASS,AQI
120.7512427,30.75084798,嘉兴市,0XFF83,24
120.0830671,30.89524644,湖州市,0XFF83,80
120.574379,30.00700998,绍兴市,0XFF83,140
122.202972,29.98754304,舟山市,0XFF83,165
121.546246,29.87620299,宁波市,0XFF83,86
119.642848,29.08127199,金华市,0XFF83,184
118.869413,28.93892703,衢州市,0XFF83,72
121.416636,28.65889302,台州市,0XFF83,38
119.912514,28.455276,丽水市,0XFF83,49
120.695457,27.99819198,温州市,0XFF83,127
103.71468,27.341637,昭通市,0XFF83,23

简单读取

# -*- coding=utf-8 -*-
import numpy as np
import csv
p = r'D:\Test\web\ol4test\data\city_aic.csv'
with open(p,encoding = 'utf-8') as f:
    data = np.loadtxt(f,delimiter = ",")
    print(data[:5])

这样直接读取的结果是,报错: ValueError: could not convert string to float: ‘X’

字符串处理-str参数

原因是,默认情况下,数据被认为是float类型,因此,在上面读取csv文件第1行时,遇到’X’,尝试进行数据类型转换,转换失败报错。
经查可以使用str参数,让方法读取数据时,支持str类型。

with open(p,encoding = 'utf-8') as f:
    data = np.loadtxt(f,str,delimiter = ",")
    print(data[:5])
[['X' 'Y' 'NAME' 'CLASS' 'AQI']
 ['120.7512427' '30.75084798' '嘉兴市' '0XFF83' '24']
 ['120.0830671' '30.89524644' '湖州市' '0XFF83' '80']
 ['120.574379' '30.00700998' '绍兴市' '0XFF83' '140']
 ['122.202972' '29.98754304' '舟山市' '0XFF83' '165']]

跳过首行 - skiprow = 1

with open(p,encoding = 'utf-8') as f:
    data = np.loadtxt(f,str,delimiter = ",", skiprows = 1)
    print(data[:5])
[['120.7512427' '30.75084798' '嘉兴市' '0XFF83' '24']
 ['120.0830671' '30.89524644' '湖州市' '0XFF83' '80']
 ['120.574379' '30.00700998' '绍兴市' '0XFF83' '140']
 ['122.202972' '29.98754304' '舟山市' '0XFF83' '165']
 ['121.546246' '29.87620299' '宁波市' '0XFF83' '86']]

读取特定列 - usecols参数

usecols参数介绍一个元组,元组里面用列索引来指定输入特定的列。

with open(p,encoding = 'utf-8') as f:
    data = np.loadtxt(f,str,delimiter = ",", skiprows = 1,usecols = (0,2))
    print (data[:5])
[['120.7512427' '嘉兴市' '30.75084798']
 ['120.0830671' '湖州市' '30.89524644']
 ['120.574379' '绍兴市' '30.00700998']
 ['122.202972' '舟山市' '29.98754304']
 ['121.546246' '宁波市' '29.87620299']]
with open(p,encoding = 'utf-8') as f:
    data = np.loadtxt(f,str,delimiter = ",", skiprows = 1,usecols = (0,2,1,4))
    print (data[:5])
[['120.7512427' '嘉兴市' '30.75084798' '24']
 ['120.0830671' '湖州市' '30.89524644' '80']
 ['120.574379' '绍兴市' '30.00700998' '140']
 ['122.202972' '舟山市' '29.98754304' '165']
 ['121.546246' '宁波市' '29.87620299' '86']]

numpy切片

numpy切片的方法有很多,但对于二维数组,我个人觉得采用Array[行,列]这种方法进行切片最容易让人理解和牢记。

with open(p,encoding = 'utf-8') as f:
    data = np.loadtxt(f,str,delimiter = ",", skiprows = 1)
    #取前5行
    print(data[:5])
[['120.7512427' '30.75084798' '嘉兴市' '0XFF83' '24']
 ['120.0830671' '30.89524644' '湖州市' '0XFF83' '80']
 ['120.574379' '30.00700998' '绍兴市' '0XFF83' '140']
 ['122.202972' '29.98754304' '舟山市' '0XFF83' '165']
 ['121.546246' '29.87620299' '宁波市' '0XFF83' '86']]
data[:5,1]#取前5行的第2列
array(['30.75084798', '30.89524644', '30.00700998', '29.98754304',
       '29.87620299'], dtype='<U11')
data[4,2] #取具体的第5行第3列
'宁波市'
data[:,2] # 取第3列
array(['嘉兴市', '湖州市', '绍兴市', '舟山市', '宁波市', '金华市', '衢州市', '台州市', '丽水市',
       '温州市', '昭通市', '迪庆藏族自治州', '丽江市', '曲靖市', '大理白族自治州', '怒江傈僳族自治州',
       '楚雄彝族自治州', '保山市', '玉溪市', '德宏傣族景颇族自治州', '文山壮族苗族自治州', '红河哈尼族彝族自治州',
       '临沧市', '普洱市', '西双版纳傣族自治州', '阿勒泰地区', '塔城地区', '克拉玛依市', '博尔塔拉蒙古自治州',
       '昌吉回族自治州', '伊犁哈萨克自治州', '哈密地区', '吐鲁番地区', '巴音郭楞蒙古自治州', '阿克苏地区',
       '克孜勒苏柯尔克孜自治州', '喀什地区', '和田地区', '阿里地区', '那曲地区', '昌都地区', '林芝地区',
       '山南地区', '日喀则地区', '广元市', '巴中市', '绵阳市', '阿坝藏族羌族自治州', '达州市', '南充市',
       '德阳市', '广安市', '遂宁市', '资阳市', '眉山市', '甘孜藏族自治州', '内江市', '自贡市', '乐山市',
       '雅安市', '泸州市', '宜宾市', '凉山彝族自治州', '攀枝花市', '榆林市', '延安市', '铜川市', '渭南市',
       '咸阳市', '宝鸡市', '商洛市', '安康市', '汉中市', '大同市', '朔州市', '忻州市', '阳泉市',
       '晋中市', '吕梁市', '长治市', '临汾市', '晋城市', '运城市', '威海市', '烟台市', '东营市',
       '滨州市', '德州市', '潍坊市', '淄博市', '青岛市', '泰安市', '莱芜市', '聊城市', '日照市',
       '济宁市', '临沂市', '枣庄市', '菏泽市', '海西蒙古族藏族自治州', '海北藏族自治州', '海东地区',
       '海南藏族自治州', '黄南藏族自治州', '果洛藏族自治州', '玉树藏族自治州', '石嘴山市', '吴忠市', '中卫市',
       '固原市', '铁岭市', '阜新市', '抚顺市', '朝阳市', '辽阳市', '本溪市', '盘锦市', '鞍山市',
       '锦州市', '葫芦岛市', '丹东市', '营口市', '大连市', '呼伦贝尔市', '兴安盟', '通辽市', '锡林郭勒盟',
       '赤峰市', '乌兰察布市', '巴彦淖尔市', '包头市', '鄂尔多斯市', '乌海市', '阿拉善盟', '九江市',
       '景德镇市', '鹰潭市', '上饶市', '抚州市', '宜春市', '新余市', '萍乡市', '吉安市', '赣州市',
       '连云港市', '徐州市', '盐城市', '淮安市', '宿迁市', '镇江市', '扬州市', '泰州市', '无锡市',
       '南通市', '常州市', '嘉兴市', '苏州市', '白城市', '松原市', '吉林市', '延边朝鲜族自治州', '辽源市',
       '四平市', '白山市', '通化市', '岳阳市', '常德市', '张家界市', '益阳市', '湘西土家族苗族自治州',
       '株洲市', '湘潭市', '娄底市', '怀化市', '衡阳市', '邵阳市', '永州市', '郴州市', '襄樊市',
       '十堰市', '随州市', '孝感市', '荆门市', '宜昌市', '黄石市', '鄂州市', '黄冈市', '荆州市',
       '恩施土家族苗族自治州', '咸宁市', '大兴安岭地区', '鹤岗市', '伊春市', '齐齐哈尔市', '佳木斯市',
       '双鸭山市', '绥化市', '大庆市', '七台河市', '鸡西市', '牡丹江市', '濮阳市', '鹤壁市', '开封市',
       '焦作市', '新乡市', '商丘市', '许昌市', '洛阳市', '漯河市', '周口市', '平顶山市', '驻马店市',
       '南阳市', '信阳市', '安阳市', '三门峡市', '承德市', '张家口市', '秦皇岛市', '唐山市', '廊坊市',
       '保定市', '沧州市', '衡水市', '邢台市', '邯郸市', '三亚市', '遵义市', '毕节地区',
       '黔南布依族苗族自治州', '黔东南苗族侗族自治州', '安顺市', '六盘水市', '黔西南布依族苗族自治州', '铜仁地区',
       '桂林市', '河池市', '贺州市', '柳州市', '梧州市', '来宾市', '百色市', '贵港市', '玉林市',
       '崇左市', '北海市', '防城港市', '钦州市', '韶关市', '梅州市', '汕头市', '揭阳市', '潮州市',
       '河源市', '清远市', '汕尾市', '惠州市', '佛山市', '东莞市', '云浮市', '肇庆市', '深圳市',
       '珠海市', '江门市', '中山市', '阳江市', '茂名市', '湛江市', '酒泉市', '嘉峪关市', '张掖市',
       '金昌市', '武威市', '白银市', '庆阳市', '平凉市', '定西市', '临夏回族自治州', '甘南藏族自治州',
       '天水市', '陇南市', '宁德市', '南平市', '三明市', '莆田市', '泉州市', '龙岩市', '厦门市',
       '漳州市', '宿州市', '淮北市', '亳州市', '蚌埠市', '阜阳市', '滁州市', '淮南市', '芜湖市',
       '马鞍山市', '巢湖市', '六安市', '宣城市', '池州市', '铜陵市', '安庆市', '黄山市'],
      dtype='<U11')

更多读取方法

可以参考我的另一篇博文:https://blog.csdn.net/u012413551/article/details/108297905

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值