Dan*_*Dan 0 indexing numpy python-2.7 genfromtxt
我使用numpy.genfromtxt这样生成数据:
ConvertToDate = lambda s:datetime.strptime(s,"%d/%m/%Y")
data= numpy.genfromtxt(open("PSECSkew.csv", "rb"),
delimiter=',',
dtype=[('CalibrationDate', datetime),('Expiry', datetime), ('B0', float), ('B1', float), ('B2', float), ('ATMAdjustment', float)],
converters={0: ConvertToDate, 1: ConvertToDate})
Run Code Online (Sandbox Code Playgroud)
我现在想要提取最后4列(每行但在循环中,所以我们只考虑一行)来分离变量.所以我这样做:
B0 = data[0][2]
B1 = data[0][3]
B2 = data[0][4]
ATM = data[0][5]
Run Code Online (Sandbox Code Playgroud)
但是,如果我能做到这一点(例如我可以使用普通的2D ndarray)我会更喜欢它:
B0, B1, B2, ATM = data[0][2:]
Run Code Online (Sandbox Code Playgroud)
但这给了我一个"无效索引"错误.有没有办法很好地做到这一点,还是应该坚持使用4线方法?
作为输出np.genfromtxt,您有一个结构化数组,即一维数组,其中每一行作为不同的字段.
如果要访问某些字段,只需按名称访问它们:
data["B0"], data["B1"], ...
Run Code Online (Sandbox Code Playgroud)
您也可以将它们分组:
data[["B0", "B1]]
Run Code Online (Sandbox Code Playgroud)
它为您提供了一个"新的"结构化数组,只包含您想要的字段(引用"新",因为数据未被复制,它仍然与您的初始数组相同).
如果您想要一些特定的"行",只需:
data[["B0","B1"]][0]
Run Code Online (Sandbox Code Playgroud)
输出第一行.切片和花式索引工作也是如此.
所以,举个例子:
B0, B1, B2, ATM = data[["B0","B1","B2","ATMAdjustment"]][0]
Run Code Online (Sandbox Code Playgroud)
如果你只想逐行访问那些字段,我建议先存储你想要的整个字段,然后迭代:
filtered_data = data[["B0","B1","B2","ATMAdjustment"]]
for row in filtered_data:
(B0, B1, B2, ATM) = row
do_something
Run Code Online (Sandbox Code Playgroud)
甚至 :
for (B0, B1, B2, ATM) in filtered_data:
do_something
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2356 次 |
| 最近记录: |