我有一系列.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,顶部有几行标题。每隔一段时间,大熊猫就会以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的文件)可用于download here
答案 0 :(得分:1)
看起来你在整个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默认具有执行此操作的功能会很酷,但似乎现在没有这样的功能。