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