Python 如何使用pandas从CSV文件读取字节数组?
我有一个Python 如何使用pandas从CSV文件读取字节数组?,python,csv,pandas,Python,Csv,Pandas,我有一个csv文件,其中有一列充满了bytearray。看起来是这样的: bytearray(b'\xf3\x90\x02\xff\xff\xff\xe0?') bytearray(b'\xf3\x90\x02\xff\xff\xff\xe0?') bytearray(b'\xf3\x00\x00\xff\xff\xff\xe0?') 等等。我试着用pandas.read\u csv()读取这个csv文件 msg是包含ByteArray的列的名称 但这并不是一个满是ByteArray的专栏。当
csv
文件,其中有一列充满了bytearray
。看起来是这样的:
bytearray(b'\xf3\x90\x02\xff\xff\xff\xe0?')
bytearray(b'\xf3\x90\x02\xff\xff\xff\xe0?')
bytearray(b'\xf3\x00\x00\xff\xff\xff\xe0?')
等等。我试着用pandas.read\u csv()读取这个csv
文件
msg
是包含ByteArray的列的名称
但这并不是一个满是ByteArray的专栏。当我选择一列并尝试使用print(data[1][1])
打印单个元素时,我得到的输出是y
,它对应于bytearray
中的1
位置
如何将此特定列作为bytearray列表导入?您可以将转换函数传递给
pandas。read\u csv()
可将bytearray
转换为bytearray
代码:
from ast import literal_eval
def read_byte_arrays(bytearray_string):
if bytearray_string.startswith('bytearray(') and \
bytearray_string.endswith(')'):
return bytearray(literal_eval(bytearray_string[10:-1]))
return bytearray_string
from io import StringIO
data = StringIO(u'\n'.join([x.strip() for x in r"""
data1,bytes,data2
1,bytearray(b'\xf3\x90\x02\xff\xff\xff\xe0?'),2
1,bytearray(b'\xf3\x90\x02\xff\xff\xff\xe0?'),2
1,bytearray(b'\xf3\x00\x00\xff\xff\xff\xe0?'),2
""".split('\n')[1:-1]]))
df = pd.read_csv(data, converters={'bytes': read_byte_arrays})
print(df)
data1 bytes data2
0 1 [243, 144, 2, 255, 255, 255, 224, 63] 2
1 1 [243, 144, 2, 255, 255, 255, 224, 63] 2
2 1 [243, 0, 0, 255, 255, 255, 224, 63] 2
测试代码:
from ast import literal_eval
def read_byte_arrays(bytearray_string):
if bytearray_string.startswith('bytearray(') and \
bytearray_string.endswith(')'):
return bytearray(literal_eval(bytearray_string[10:-1]))
return bytearray_string
from io import StringIO
data = StringIO(u'\n'.join([x.strip() for x in r"""
data1,bytes,data2
1,bytearray(b'\xf3\x90\x02\xff\xff\xff\xe0?'),2
1,bytearray(b'\xf3\x90\x02\xff\xff\xff\xe0?'),2
1,bytearray(b'\xf3\x00\x00\xff\xff\xff\xe0?'),2
""".split('\n')[1:-1]]))
df = pd.read_csv(data, converters={'bytes': read_byte_arrays})
print(df)
data1 bytes data2
0 1 [243, 144, 2, 255, 255, 255, 224, 63] 2
1 1 [243, 144, 2, 255, 255, 255, 224, 63] 2
2 1 [243, 0, 0, 255, 255, 255, 224, 63] 2
结果:
from ast import literal_eval
def read_byte_arrays(bytearray_string):
if bytearray_string.startswith('bytearray(') and \
bytearray_string.endswith(')'):
return bytearray(literal_eval(bytearray_string[10:-1]))
return bytearray_string
from io import StringIO
data = StringIO(u'\n'.join([x.strip() for x in r"""
data1,bytes,data2
1,bytearray(b'\xf3\x90\x02\xff\xff\xff\xe0?'),2
1,bytearray(b'\xf3\x90\x02\xff\xff\xff\xe0?'),2
1,bytearray(b'\xf3\x00\x00\xff\xff\xff\xe0?'),2
""".split('\n')[1:-1]]))
df = pd.read_csv(data, converters={'bytes': read_byte_arrays})
print(df)
data1 bytes data2
0 1 [243, 144, 2, 255, 255, 255, 224, 63] 2
1 1 [243, 144, 2, 255, 255, 255, 224, 63] 2
2 1 [243, 0, 0, 255, 255, 255, 224, 63] 2
文件中的文本是否按字面意思:
bytearray(b'\xf3\x00\x00\xff\xff\xff\xe0?)
?