day04-numpy操作文件

操作文件

使用loadtxt读取文本、csv文件

loadtxt(fname, dtype=<type 'float'>, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0,encoding='bytes')

参数:

  • fname:指定文件名称或字符串。支持压缩文件,包括gz、bz格式。
  • dtype:数据类型。 默认float。object均可接收。
  • comments:字符串或字符串组成的列表。表示**注释字符集开始的标志,默认为#。**加了#则不会读取
  • delimiter:字符串。分隔符。数据之间用什么分割。
  • converters:给一个字典将特定列的数据转换为字典中对应的函数的浮点型数据。例如将空值转换为0,默认为空。
  • skiprows:跳过特定行数据。例如跳过前1行(可能是标题或注释,注释也算行数)。默认为0。
  • usecols:元组。用来指定要读取数据的列,第一列为0。例如(1, 3, 5),默认为空。
  • unpack:布尔型。指定是否转置数组,如果为真则转置,默认为False。
  • ndmin:整数型。指定返回的数组至少包含特定维度的数组。值域为0、1、2,默认为0。
  • encoding:编码, 确认文件是gbk还是utf-8 格式

返回:从文件中读取的数组。

数据:
姓名,年龄,性别,身高
小王,22,男,170
小张,25,女,165
小花,19,女,167
小谭,20,男,169
小胡,21,女,161
小余,19,女,159
小陈,27,男,177

分析:由于每一列的数据类型都不一样,需要自定义数据类型。

datatype = np.dtype([('name',np.str_),('age','i1'),('gender','U1'),('height','i2')])
#计算平均年龄方法一
data = np.loadtxt('has_title.csv',dtype =datatype,delimiter=',',skiprows=1)
#读取绝对路径时:  r'D:/XXX/has_title.csv'或单斜杠转化为双斜杠
print(data['age'].mean())

#计算女生的平均身高
isgirl = data['gender']=='女'
print(isgirl)
data['height'][isgirl]
data['height'][isgirl].mean()
"""
[False  True  True False  True  True False]
array([165, 167, 161, 159], dtype=int16)
163.0
"""


#计算平均年龄方法二
data = np.loadtxt('has_title.csv',dtype =int,usecols=(1,3),delimiter=',',skiprows=1)
print(data.mean(axis=0)[0])


#读取指定的列
user_info = np.dtype([('age','i1'),('height','i2')])
print(user_info)
#使用自定义的数据类型,读取数据
data = np.loadtxt('has_title.csv',dtype = user_info,delimiter = ',',skiprows=1,usecols = (1,3))
print(data)

对于空数据的处理方法

在这里插入图片描述

如上图中小谭的年龄没有数据,空的数据转换成浮点数会报错

使用参数converters

converters =  {列索引:处理的函数,key:value}
# 1. 定义数据类型
def parse_age(age):
    try:
        return int(age)
    except:
        return 0
    
    
data =np.loadtxt('has_empty_data.csv',delimiter=',',skiprows=1,usecols=1,
                 converters={1:parse_age})
data

converters={1:parse_age} 的含义是为 CSV 文件中的第二列(索引为 1)应用一个自定义的转换函数 parse_agenp.loadtxt 函数通过 converters 参数允许您指定一个字典,其中键是列的索引,值是用于转换该列数据的函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值