Pandas函数read_csv的参数na_values的用法

一、问题描述

我们使用Pandas的read_csv函数读取csv文件的时候,缺失的数据总是会自动填充为NaN.什么样的值会被认为是缺失的数据呢?我们能不能提供一些个性化的缺失数据?这就要用到na_values参数。下面将介绍这个参数。

二、na_values参数的用法

我们有一个文件叫comments.csv,如果普通读入,得到的结果如下图所示:

这份数据看起来很完整,没有缺失的值。但是行索引为1的用户的年龄是0,这是不合理的,所以我们也想把它看成缺失值,希望它能变成NaN.这时候我们就可以使用na_values参数了。

官方文档对na_values参数的的解释如下:

可以看到,默认情况下,pandas会认为空字符串,还有一系列长得像NaN,长得像null的字符串是缺失值。如果我们想要补充一些自定义的等同于缺失的值,就可以给na_values参数传值。它接受的数据类型有标量(数字),字符串,列表类的,字典。

现在我们希望pandas也把0当成缺失值,用NaN来填充原本为0的单元格。所以我们用整型就可以了

import pandas as pd


df = pd.read_csv('C:\\Users\\22768\\Desktop\\comments.csv',na_values=0)

print(df)

打印的结果如下:

年龄为0的单元格确实被替换成了NaN.但是又出现了一个新的问题。行索引为2的用户,她的性别是0,而现在0被看成缺失值了,也替换成了NaN,这不是我们希望的。

我们可以用字典来解决这个问题。如果na_values的参数是一个字典,那就可以为具体的列来指定缺失值的样子。我们就可以指定在Age这一列,0要被看成缺失值;在Comment这一列,“该用户没有评价”被看成缺失值。代码如下:

df = pd.read_csv('C:\\Users\\22768\\Desktop\\comments.csv',
                 na_values={'Age':0,'Comment':'该用户没有评价'})
print(df)

打印结果如下:

这次的结果就比较合理了。

 

 

如果这篇博文帮到了你,就请给我点个吧(#^.^#)

有疑问也欢迎留言~博主可nice啦,在线秒回ヾ(◍°∇°◍)ノ゙

  • 118
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
1. filepath_or_buffer:文件路径(字符串),URL或文件型对象(例如StringIO)。 2. sep:分隔符,默认为逗号。可以是任何字符串,如“\t”、“|”等。 3. delimiter:可选参数,与sep相同,但是只能是单个字符。 4. header:用作列名的行数。默认值为0(第一行),如果没有列名则应将其设置为None。 5. names:列名列表,用于替换header。如果header=None,则必须指定names。 6. index_col:将列号或列名用作行索引。如果不是整数或整数列表,则返回多层索引。 7. usecols:要读取的列的列表。如果不指定,则读取所有列。 8. dtype:每列的数据类型。可以是Python类型或NumPy dtype。 9. skiprows:需要跳过的行数(从0开始)。可以是单个整数或整数列表。 10. skipfooter:需要跳过的行数(从文件末尾开始)。默认为0。 11. na_values:用于识别缺失值的值列表。默认情况下,以下值将被视为缺失值:“”,“#N / A”,“#N / A N / A”,“#NA”,“-1.#IND”,“-1.#QNAN”,“-NaN”,“-nan”,“1.#IND”,“1.#QNAN”,“N / A”,“NA”,“NULL”,“NaN”,“n / a”,“nan”,“null”。 12. parse_dates:将列中的值解析为日期时间。如果是True,则尝试解析所有列。如果是列表,则仅尝试解析在其中列中的列编号或列名。 13. date_parser:用于解析日期时间的函数。默认情况下使用dateutil.parser.parse。 14. nrows:要读取的行数。如果文件包含更多行,则将忽略其余行。 15. skip_blank_lines:如果为True,则跳过空行。默认为True。 16. comment:注释字符。如果指定,则将从该字符开始的所有文本视为注释并跳过。 17. encoding:文件的编码类型。默认为None,将使用系统默认编码。 18. squeeze:如果数据只包含一列,则返回Series。如果为False,则始终返回DataFrame。 19. thousands:千分位分隔符。 20. decimal:十进制分隔符。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值