我有一个csv
文件,其中的列已满bytearrays
。它看起来像这样:
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?')
等等。我尝试使用csv
读取此pandas.read_csv()
文件。
df = pd.read_csv(filename, error_bad_lines=False)
data = df.msg
msg
是包含bytearrays的列的名称。
但它看起来并不像是一个充满bytearrays的列。当我选择一列并尝试使用print(data[1][1])
打印单个元素时,我得到的输出为y
,与1
中的bytearray
位置相对应。
如何将此特定列作为bytearrays列表导入?
答案 0 :(得分:2)
您可以将转换器功能传递给pandas.read_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