def parse_1min_data(data): df = pd.DataFrame(columns=['date', 'time', 'open', 'high', 'low', 'close', 'volume', 'amount']) for i in range(len(data)): row_data = struct.unpack('iiiiifdi', bytes(data[i*32:(i+1)*32])) date = str(row_data[0]) time = '{:04d}'.format(row_data[1]) open_price = row_data[2] / 100.0 high = row_data[3] / 100.0 low = row_data[4] / 100.0 close = row_data[5] / 100.0 volume = row_data[6] amount = row_data[7] df.loc[i] = [date, time, open_price, high, low, close, volume, amount] return df
时间: 2024-03-07 15:53:29 浏览: 103
根据你提供的代码,我没有看到明显的错误。那么可能是数据文件本身存在问题,或者在读取数据时出现了一些意外情况。建议检查数据文件的完整性和正确性,以及代码中读取数据的逻辑是否正确。
你可以尝试打印出 `data` 变量的值,查看一下数据的格式和长度是否正确。同时,你也可以尝试使用其他方法读取同一份数据,看看是否能够正常解析。
相关问题
def parse_day_data(data): df = pd.DataFrame(columns=['date', 'open', 'high', 'low', 'close', 'volume', 'amount']) for i in range(len(data)): row_data = struct.unpack('iiiiifd', data[i]) date = str(row_data[0]) open_price = row_data[1] / 100.0 high = row_data[2] / 100.0 low = row_data[3] / 100.0 close = row_data[4] / 100.0 volume = row_data[5] amount = row_data[6] df.loc[i] = [date, open_price, high, low, close, volume, amount] return df
这段代码中的`parse_day_data`函数依旧存在问题。在第6行代码中,`struct.unpack`函数的第二个参数`data[i]`应该是一个bytes-like object,但实际上它是一个int类型,因此会导致TypeError。解决方法同样是将`data[i]`转换为bytes类型,如下所示:
```python
def parse_day_data(data):
df = pd.DataFrame(columns=['date', 'open', 'high', 'low', 'close', 'volume', 'amount'])
for i in range(len(data)//32):
row_data = struct.unpack('iiiiifd', bytes(data[i*32:(i+1)*32]))
date = str(row_data[0])
open_price = row_data[1] / 100.0
high_price = row_data[2] / 100.0
low_price = row_data[3] / 100.0
close_price = row_data[4] / 100.0
volume = row_data[5]
amount = row_data[6]
df.loc[i] = [date, open_price, high_price, low_price, close_price, volume, amount]
return df
```
修改后的代码中,在循环中使用`i*32`和`(i+1)*32`来指定每个数据块的起始位置和终止位置,然后将这个数据块转换为bytes类型。这样就可以正确的解析数据了。
error Traceback (most recent call last) d:\TDXDATA\tes111t.py in line 73 70 day_data = read_data(r"D:\Quant1\sz000001.day") 72 # 读取1分钟线数据 ---> 73 min1_data = read_data(r"D:\Quant1\sz000001.lc1") 75 # 读取5分钟线数据 76 min5_data = read_data(r"D:\Quant1\sz000001.lc5") d:\TDXDATA\tes111t.py in line 62, in read_data(filename) 60 df = parse_day_data(data) 61 elif filename.endswith('.lc1'): ---> 62 df = parse_1min_data(data) 63 elif filename.endswith('.lc5'): 64 df = parse_5min_data(data) d:\TDXDATA\tes111t.py in line 27, in parse_1min_data(data) 25 df = pd.DataFrame(columns=['date', 'time', 'open', 'high', 'low', 'close', 'volume', 'amount']) 26 for i in range(len(data)): ---> 27 row_data = struct.unpack('iiiiifdi', bytes(data[i*32:(i+1)*32])) 28 date = str(row_data[0]) 29 time = '{:04d}'.format(row_data[1]) error: unpack requires a buffer of 36 bytes
根据错误提示,似乎是在读取1分钟线数据时出现了错误。具体来说,`struct.unpack()` 函数需要一个长度为36字节的缓冲区,但是传入的数据不够长,导致出现了错误。可能是数据文件本身存在问题,或者在读取数据时出现了一些意外情况。建议检查数据文件的完整性和正确性,以及代码中读取数据的逻辑是否正确。
阅读全文