Python 熊猫随机阅读一本书?

Python 熊猫随机阅读一本书?,python,python-2.7,csv,pandas,nan,Python,Python 2.7,Csv,Pandas,Nan,我有一系列的.csv文件,我正在用pandas.read\u csv阅读。从一大堆专栏中,我只读了2篇(第2和第15篇专栏) CSV看起来像 ,顶部有几行标题。每隔一段时间,熊猫就会把这些数字中的一个读作“NaN”。Excel在读取这些值和目视检查文件方面没有问题,我看不出问题的原因。具体地说,在这种情况下,“值”列在本文件中索引为265的行,在数据帧中索引为263的行,在其应为~27.4时读取NaN >>>data['Value'][264] nan 这个问

我有一系列的.csv文件,我正在用pandas.read\u csv阅读。从一大堆专栏中,我只读了2篇(第2和第15篇专栏)

CSV看起来像 ,顶部有几行标题。每隔一段时间,熊猫就会把这些数字中的一个读作“NaN”。Excel在读取这些值和目视检查文件方面没有问题,我看不出问题的原因。具体地说,在这种情况下,“值”列在本文件中索引为265的行,在数据帧中索引为263的行,在其应为~27.4时读取NaN

    >>>data['Value'][264]
    nan
这个问题是一致的,不会随着我读取的文件数量而改变。在许多文件中,这个问题并不存在。在其余部分中,它将只在任一列中读取一个随机数作为NaN。我曾尝试使用dtype将自动float64更改为np.float128,但这并不能解决这个问题。有没有办法解决这个问题


更新:grep搜索显示换行符为\M,只有4个例外情况——在每个文件开头的头之前的行。进一步检查,在失败的文件中,这一特定点[264]的处理方式有所不同:在5/12文件中,这一点没有问题。在2/12文件中读取为27.0,在3/12文件中读取为nan,在2/12文件中读取为2.0。其中一个文件(读取27.0的文件)可用于

看起来您的整个csv文件中都随机存在,它们导致了问题。要解决此问题,您需要做的是将
\0
替换为零

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

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'])
导入系统 如果系统版本信息[0]<3: 从StringIO导入StringIO 其他: 从io导入StringIO datafiles=glob.glob(mypath) 对于数据文件中的数据文件: st='' 打开(D文件,'r')作为f: 对于f中的行: 行=行。替换('\0','') st+=直线 data=pd.read\u csv(StringIO(st),header=6,usecols=['Reading','Value'])
当您将数据加载到数据帧中时,如果pandas在默认情况下有一个函数来执行此操作,那将是很酷的,但目前似乎还没有类似的函数

文件在某些行上是否可能有不同的换行符?文件是否为UTF-8-BOM格式?试着用记事本++将其切换到UTF-8。你能把一个有问题的CSV上传到某个地方吗?@CharlieHaley检查更新。谢谢太棒了,非常感谢。事实上,我自己刚刚找到了空字符,但我正在寻找一个bash命令行来删除它们,但这也可以!
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'])