我在读取pandas模块上的CSV(或txt文件)时遇到问题,因为numpy的loadtxt函数占用了太多时间,所以我决定改用pandas read_csv。
我想从txt文件中创建一个numpy数组,其中四列之间用空格隔开,并且行数非常大(例如256 ^ 3。在本示例中为64 ^ 3)。
问题是我不知道为什么,但是熊猫的read_csv似乎总是跳过csv(txt)文件的第一行(第一行),从而减少了数据量。
这是代码。
from __future__ import division
import numpy as np
import pandas as pd
ngridx = 4
ngridy = 4
ngridz = 4
size = ngridx*ngridy*ngridz
f = np.zeros((size,4))
a = np.arange(size)
f[:, 0] = np.floor_divide(a, ngridy*ngridz)
f[:, 1] = np.fmod(np.floor_divide(a, ngridz), ngridy)
f[:, 2] = np.fmod(a, ngridz)
f[:, 3] = np.random.rand(size)
print f[0]
np.savetxt('Testarray.txt',f,fmt='%6.16f')
g = pd.read_csv('Testarray.txt',delimiter=' ').values
print g[0]
print len(g[:,3])
输出中显示的f [0]和g [0]必须匹配,但不匹配,这表明熊猫正在跳过的第一行Testarray.txt
。另外,已加载文件g
的长度小于array的长度f
。
我需要帮助。
提前致谢。
默认情况下,pd.read_csv
使用header=0
(当names
未指定参数时)表示第一行(即索引第0行)被解释为列名。
如果您的数据没有标题,请使用
pd.read_csv(..., header=None)
例如,
import io
import sys
import pandas as pd
if sys.version_info.major == 3:
# Python3
StringIO = io.StringIO
else:
# Python2
StringIO = io.BytesIO
text = '''\
1 2 3
4 5 6
'''
print(pd.read_csv(StringIO(text), sep=' '))
如果不使用header
,则第一行1 2 3
设置列名称:
1 2 3
0 4 5 6
使用header=None
,第一行被视为数据:
print(pd.read_csv(StringIO(text), sep=' ', header=None))
印刷
0 1 2
0 1 2 3
1 4 5 6
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句