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?)