python - Pandas 随机读取一个NaN?

标签 python python-2.7 csv pandas nan

我有一系列 .csv 文件,我正在使用 pandas.read_csv 读取这些文件。从一堆专栏中,我只读了 2,(第 2 和第 15 列)。

   datafiles = glob.glob(mypath)
   for dfile in datafiles:
        data = pd.read_csv(dfile,header=6,usecols=['Reading','Value'])

CSV 看起来像 this ,顶部有几行标题。每隔一段时间 pandas 就会将这些数字中的一个作为 NaN 读出。 Excel 可以毫不费力地读取这些值,并且目视检查文件我看不出是什么导致了问题。具体来说,在这种情况下,该文件中索引为 265 的行,数据框中的 263,“值”列读取 NaN,而它应该是 ~27.4。

    >>>data['Value'][264]
    nan

这个问题是一致的,不会随着我读取文件的数量而改变。在许多文件中,不存在此问题。在其余情况下,它只会在任一列中读取一个随机数作为 NaN。我尝试使用 dtype 从自动 float64 更改为 np.float128,但这并不能解决问题。关于如何解决此问题的任何想法?

更新:grep 搜索显示换行符是\M,只有 4 个异常(exception)——每个文件开头的行在标题之前。在进一步检查中,这个特定点 [264] 在失败的文件中被不同地对待:在 5/12 文件中,它很好。在 2/12 文件中读出为 27.0,在 3/12 文件中读出为 nan,在 2/12 文件中读出为 2.0。其中一个文件(读出 27.0 的文件)可用于 download here

最佳答案

看起来您的 csv 文件中随机包含 null characters,它们导致了问题。要解决此问题,您需要做的是将 \0 替换为空。

这是一个如何做到这一点的例子。导入是 because of 从字符串而不是文件加载。

import sys
if sys.version_info[0] < 3:
    from StringIO import StringIO
else:
    from io import StringIO

datafiles = glob.glob(mypath)
for dfile in datafiles:
    st=''
    with open(dfile,'r') as f:
        for line in f:
            line = line.replace('\0','')
            st += line
    data = pd.read_csv(StringIO(st),header=6,usecols=['Reading','Value'])

当您将数据加载到 DataFrame 时,如果 pandas 具有默认执行此操作的功能,那将会很酷,但目前看来还没有这样的功能。

关于python - Pandas 随机读取一个NaN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35486259/

相关文章:

python - 编译每行一个模式的正则表达式

java - Encog SVM 无法训练

python - 如何在 Pandas DataFrame 的列表列中展平分隔字符串?

python - 如何获得高斯朴素贝叶斯中的特征重要性

python - 传递一系列 pandas 数据会引发 KeyError

python - 使用 PCA 进行降维进行文本分类

java - 将 csv 文件上传到 appengine

java - Jackson 如何将一个 Pojo 字段映射到 2 个(json)字段(相同的内容,不同的名称)

python - 将 MySQL 数据库中的信息打包到 tkinter box 的最佳方法

python - 将数据从 Python 程序发送到 C++ 程序的策略