我遇到了问题而且我不知道如何处理它。
我有这样的CSV文件:
0.3,36.22683698,-115.0466482,1836.255238,0,0,0.2105903662,0.6848089322,41.15086807,2016/3/26,4:35:51
0.6,36.22683698,-115.0466482,1836.255238,0,0,0.2105903662,0.6848089322,41.15086807,2016/3/26,4:35:51
0.9,36.22683698,-115.0466482,1836.255238,0,0,0.2105903662,0.6848089322,41.15086807,2016/3/26,4:35:51
正如您所看到的,首先我有9个浮点值,然后另外2个我想加载为字符串。分隔符=,
当我使用时:
load = np.genfromtxt(str(path), delimiter=',')
print load[0,4]
它从第0行第4列打印值,它可以正常工作。数据已正确加载。但是有一个问题,因为最后2个值是nan
print load[0,10]
>>nan
当我将代码更改为:
load = np.genfromtxt(str(path), delimiter=',',dtype=None)
我收到错误:
打印负载[0,4]
的索引太多
IndexError:数组
除非我添加dtype=None
我做错了什么?
答案 0 :(得分:2)
您无法使用多个dtype
创建numpy数组。您必须使用dtype=str
import numpy as np
load = np.genfromtxt(str(path), delimiter=',',dtype=str)
使用dtype=None
,它会创建一个形状为(3,)
的numpy数组。因此,您无法致电load[0, 4]
。
每个条目都是包含数据的元组。因为元组可以包含几种类型。
也许出于您的目的,您必须使用熊猫:
import pandas as pd
load = pd.read_csv(str(path), header=None)
输出如下:
0 1 2 3 4 5 6 7 \
0 0.3 36.226837 -115.046648 1836.255238 0 0 0.21059 0.684809
1 0.6 36.226837 -115.046648 1836.255238 0 0 0.21059 0.684809
2 0.9 36.226837 -115.046648 1836.255238 0 0 0.21059 0.6848098 9 10
0 41.150868 2016/3/26 4:35:51
1 41.150868 2016/3/26 4:35:51
2 41.150868 2016/3/26 4:35:51
每列都有pandas推断的dtype
答案 1 :(得分:1)
对此案例应用较早的genfromtxt
答案:
txt="""0.3,36.22683698,-115.0466482,1836.255238,0,0,0.2105903662,0.6848089322,41.15086807,2016/3/26,4:35:51
... ..."""
>>> load=np.genfromtxt(txt.splitlines(),dtype=None,delimiter=',')
>>> load.shape
(3,)
>>> load.dtype
dtype([('f0', '<f8'), ('f1', '<f8'), ('f2', '<f8'), ('f3', '<f8'), ('f4', '<i4'), ('f5', '<i4'), ('f6', '<f8'), ('f7', '<f8'), ('f8', '<f8'), ('f9', 'S9'), ('f10', 'S7')])
形状是1d,但是dtype
是复合的,浮动,整数和字符串的混合 - 其中11个。
>>> load[0]
(0.3, 36.22683698, -115.0466482, 1836.255238, 0, 0, 0.2105903662, 0.6848089322, 41.15086807, '2016/3/26', '4:35:51')
>>> load['f0']
array([ 0.3, 0.6, 0.9])
'rows'或记录按编号访问,但'columns'现在是字段,并按名称访问(您也可以从csv列标题中获取名称,这里它们会自动生成)。
>>> load[0]['f4']
0
>>> load[0]['f3']
1836.255238
单个元素可以通过数字和名称的组合进行访问。
这种结构化数组格式的缺点是跨列进行数学运算的能力有限。解决这个问题的方法是将列分组到另一层复合中。
使用这些数据,我可以定义5个字段,即float,int和string的混合:
>>> dt=np.dtype('(4)float,(2)int,(3)float,S10,S10')
>>> dt
dtype([('f0', '<f8', (4,)), ('f1', '<i4', (2,)), ('f2', '<f8', (3,)), ('f3', 'S10'), ('f4', 'S10')])
>>> load=np.genfromtxt(txt.splitlines(),dtype=dt,delimiter=',')
现在第一个字段是(3,4)数组:
>>> load['f0']
array([[ 3.00000000e-01, 3.62268370e+01, -1.15046648e+02,
1.83625524e+03],
[ 6.00000000e-01, 3.62268370e+01, -1.15046648e+02,
1.83625524e+03],
[ 9.00000000e-01, 3.62268370e+01, -1.15046648e+02,
1.83625524e+03]])
>>> load['f1']
array([[0, 0],
[0, 0],
[0, 0]])
dt=np.dtype('(9)float,S10,S10')
也可以工作,因为2个int列可以作为浮点数加载。
最后2列可以加载为np.datetime64
,但用逗号分隔它们可能会使步骤复杂化。
这些9个数字列可以从pandas
加载提取到numpy
浮点数组中,其中包含:
pload.values[:,:9].astype(float)
pload.as_matrix(range(9))
答案 2 :(得分:0)
您需要在Ext.application({
name: 'ExtJSApp',
launch: function () {
Ext.create('Ext.grid.Panel', {
renderTo: Ext.get('dvGrid'),
store: billDStore,
width: 1300,
height: 200,
title: 'dfssdf',
columns: [
{
text: 'SlNo',
width: 20,
sortable: false,
hideable: false,
dataIndex: 'SlNo'
},
{
text: 'Bill No',
width: 20,
dataIndex: 'BillNo',
hidden: true
},
{
text: 'ItemCode',
width: 50,
dataIndex: 'ItemCode'
},
{
text: 'Description',
width: 150,
dataIndex: 'Desc'
},
{
text: 'Quantity',
width: 100,
dataIndex: 'Qty'
},
{
text: 'Rate',
width: 100,
dataIndex: 'Rate'
},
{
text: 'Discount Percent',
width: 100,
dataIndex: 'DiscPercent'
},
{
text: 'Discount Amount',
width: 100,
dataIndex: 'DiscAmt'
},
{
text: 'Amount',
width: 100,
dataIndex: 'Amount'
}
]
});
}
});
中添加名称= True。genfromtxt returning NaN rows上有类似问题
看看那里