pandas读数据出现struct.error

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pandas读数据出现struct.error相关的知识,希望对你有一定的参考价值。

参考技术A structerror200是pandas中的一种常见错误,提示数据的结构不正确,也就是说,无法正确读取数据。有时,这可能是由于文件中存在格式错误造成的,而有时可能是由于pandas没有正确识别文件格式造成的。要解决这个错误,首先要检查文件中是否存在格式错误,如果有,需要修正文件,然后再尝试读取文件。另外,可以尝试使用不同的格式,如csv和xlsx,来读取文件,以获得最佳结果。此外,可以尝试调整读取选项,如指定分隔符,指定行列索引,以期获得更好的读取效果。 参考技术B StructError 200的错误指的是当程序试图读取structured数据时,它发现数据异常,超出了可以处理的范围。这个错误可能由于输入数据的格式错误或者数据字段不兼容导致,也可能是文件中的数据有损坏或损失,从而导致数据无法被正确读取。要解决此错误,首先应该确保输入数据的格式是正确的,并且字段是兼容的。然后,应该检查文件中的数据,确保数据没有损坏或损失,以便正确读取。最后,如果仍然出现StructError 200的错误,可以尝试使用特殊的字符集编码,例如UTF-8,来解决这个问题。 参考技术C StructError是pandas中常见的异常,它发生在pandas尝试从文件中读取结构化数据时发生的错误。通常,StructError的原因是文件中的数据格式不正确,或者数据的结构不符合pandas预期的格式。为了解决StructError,您必须正确格式化文件中的数据,以便pandas可以正确识别和读取它们。此外,您可以尝试使用pandas的read_csv()方法,以便以更加灵活的方式解析文件,并确保以正确的格式读取数据。 参考技术D structerror200是一种Pandas读取数据时出现的特定异常,它表示Pandas无法解析提供的数据格式。当读取数据时,Pandas需要将数据放入一个表格中,但是由于数据格式不正确,Pandas无法将数据放入表格。这种异常可以通过检查数据源是否正确,检查数据格式和数据类型是否正确,并重新格式化数据来解决。另外,也可以使用Pandas的read_csv函数来读取数据,因为它可以更好地处理不同格式的数据。 第5个回答  2023-03-10 structerror 200 是一种常见的 pandas 错误,其中的主要原因是数据框的字段数量不匹配。当 pandas 试图将数据框加载到内存中,它会检查内存中的字段数量,如果字段数量不匹配,则会报出 structerror 200 错误。解决这一错误的最佳方法是核对数据框中的字段,确保它们是正确的。此外,您还可以使用 pd.read_csv() 方法,将指定的列传递给该方法,以确保数据框中的字段数量与内存中的字段数量匹配。最后,您还可以使用更加精细的筛选来确保 pandas 正确地读取数据框中的内容,以避免出现 structerror 200 错误。

struct.pack引发“struct.error:required参数不是整数”

我正在尝试建立一个网络代理,将数据包转发到另一个IP。我可以嗅探数据包,解压缩,查看,打印和操作其内容。但是,当我想打包字节以将其转发到其他IP时,它会给出以下错误:

struct.error:required参数不是整数

这行代码引发了错误:

ip_header = struct.pack('!BBHHHBBH4s4s' ,version_IHL, TOS, totalLength, ID,flags, TTL,protocolNR, checksum,sourceAddress,destinationAddress)

这是代码。代码中的大胆内容是我的代码中的注释。

import socket
import sys
import struct
import re
import logging
import struct
from scapy.all import *
import Functions
logging.basicConfig(filename='example.log',level=logging.DEBUG)

hold = "192.168.0.125"

print ("
			**************************")
print ("			*****SettingUp Server*****")
print ("			**************************

")
print("	*****Implementing DHKE")
print ("	*****Generating server public & private keypairs now . . .")
(e,n), private = Functions.generate_keypair(7, 11)
print ("*****Public Key: {} , {} ", e,n)
print ("*****Private key: {} ", private)
public = (e,n)
ip = '192.168.0.125'
port = 5001

# the public network interface
#HOST = socket.gethostbyname(socket.gethostname())
#..............................................................................................
# create a raw socket and bind it to the public interface
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
s.bind(('192.168.0.117',5001))

# Include IP headers
s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)

logging.basicConfig(format='%(asctime)s %(message)s')
logging.warning('format=%(asctime)s %(message)s')

# receive all packages
s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)

#..............................................................................................
data = Functions.recievedata(s)
logging.info('**Packet Recieved')
print("Packet Recieved")

#function_data = tuple(struct.unpack(data))
unpacked_data = struct.unpack('!BBHHHBBH4s4s',data[:20])
listunpacked = list(unpacked_data)
logging.info('--> Unpacking packet')
version_IHL = unpacked_data[0]
version = version_IHL >>4
IHL = version_IHL & 0xF
TOS = unpacked_data[1]
totalLength = unpacked_data[2]
ID = unpacked_data[3]
flags = unpacked_data[4]
fragmentOffset =  unpacked_data[4] &  0x1FFF
TTL = unpacked_data[5]
protocolNR = unpacked_data[6]
checksum = unpacked_data[7]
sourceAddress = socket.inet_ntoa(unpacked_data[8])
destinationAddress = socket.inet_ntoa(unpacked_data[9])



#..............................................................................................
print("An IP packet with the size %i is captured.", (totalLength))
print("Raw data: "+ str(data))
print("
Parsed data")
print("Version:		"+ str(version))
print("Header length:		"+ str(IHL*4)+'bytes')
print("Type of service:		" + str(Functions.getTOS(TOS)))
print("Length:			"+str(totalLength))
print("ID:			"+str(hex(ID)) + ' {' + str(ID) + '}')
print("Flags:			" + Functions.getFlags(flags))
print("Fragment offset:	" + str(fragmentOffset))
print( "TTL:			"+str(TTL))
print("Protocol:		" + Functions.getProtocol(protocolNR))
print("Checksum:		" + str(checksum))
print("Source:			" + sourceAddress)
print("Destination:		" + destinationAddress)
print("Payload:
"+str(data[20:]))
# receive a package
#print(s.recvfrom(65565))
#IP = input("Enter IP address to send: ")
#port = int(input("Port: "))

#..............................................................................................
print("	Old Destination: "+ destinationAddress)

listunpacked[9] = hold
unpacked_data = tuple(listunpacked)
print("
		New Address is: "+ unpacked_data[9])
print()
#s.inet_aton(unpacked_data[9]) = hold

#unpacked_data = tuple(listunpacked)
#unpacked_data = bytes(unpacked_data)
#destinationAddress = socket.inet_ntoa(unpacked_data[9])
#..............................................................................................
# tcp header fields
tcp_source = 80  # source port
tcp_dest = 5001  # destination port
tcp_seq = 454
tcp_ack_seq = 0
tcp_doff = 5  # 4 bit field, size of tcp header, 5 * 4 = 20 bytes
# tcp flags
tcp_fin = 0
tcp_syn = 1
tcp_rst = 0
tcp_psh = 0
tcp_ack = 0
tcp_urg = 0
tcp_window = socket.htons(5840)  # maximum allowed window size
tcp_check = 0
tcp_urg_ptr = 0
tcp_offset_res = (tcp_doff << 4) + 0
tcp_flags = tcp_fin + (tcp_syn << 1) + (tcp_rst << 2) + (tcp_psh << 3) + (tcp_ack << 4) + (tcp_urg << 5)

# the ! in the pack format string means network order
tcp_header = tuple(struct.pack('!HHLLBBHHH', tcp_source, tcp_dest, tcp_seq, tcp_ack_seq, tcp_offset_res, tcp_flags, tcp_window,tcp_check, tcp_urg_ptr))
#p =(data+tcp_header)

#hold = bytes(hold,"utf-8")
#hold  = socket.inet_aton ( hold )
#checksum = bytes(checksum,"utf-8")
#destinationAddress = c_int(listunpacked[9])
checksum = bytes(str(checksum),"utf-8")
#ip_header = struct.pack('!BBHHHBBH4s4s' , version_IHL, TOS, totalLength, ID,flags, TTL,protocolNR, checksum,sourceAddress,destinationAddress)
#tcp_header = struct.pack('!HHLLBBH' , tcp_source, tcp_dest, tcp_seq, tcp_ack_seq, tcp_offset_res, tcp_flags,  tcp_window) + struct.pack('H' , tcp_check) + struct.pack('!H' , tcp_urg_ptr)

#packet = ip_header + tcp_header + str(data[20:])
message = "How are  you"
#data = bytes(unpacked_data,"utf-8") + tcp_header + message
ip_header = struct.pack('!BBHHHBBH4s4s' ,version_IHL, TOS, totalLength, ID,flags, TTL,protocolNR, checksum,sourceAddress,destinationAddress)
data = bytes(unpacked_data) + data[20:]
s.sendto(data, ("192.168.0.125" , 5001))
print("Packet sent")
# disabled promiscuous mode
s.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF)
答案
ip_header = struct.pack('!BBHHHBBH4s4s' ,version_IHL, TOS, totalLength, ID,flags, TTL,protocolNR, checksum,sourceAddress,destinationAddress)

BH格式都需要整数参数(或实现__index__方法的非整数对象)(请参阅Format Characters)。

checksum参数现在是bytes类型,因为你在打包之前将它设置在这里:

checksum = bytes(str(checksum),"utf-8")

并且bytes对象不实现__index__方法。 你可以使用dir(checksum)来检查。

这就是你获得struct.error exception的原因。

当使用整数格式之一('b','B','h','H','i','I','l','L','q','Q'打包值x时'),如果x超出该格式的有效范围,则引发struct.error。

或者:

  • bytes(str(checksum),"utf-8")输出使用不同的变量
  • 传递一个int类型对象作为校验和值

以上是关于pandas读数据出现struct.error的主要内容,如果未能解决你的问题,请参考以下文章

请教,C8051F340单片机读P4口的方法(c语言)。我的方法是与立即数,但这样貌似有不读数不稳定的时候。

SAP连接电脑串口读数(电子称,磅等数据读取)

struct.pack引发“struct.error:required参数不是整数”

struct.unpack() struct.error: unpack 需要 124 字节的缓冲区

为啥用python的pandas读excel文件时会少掉一行数据

pandas df.resample('D').sum() 返回 NaN