如何使用pandas从CSV文件中读取bytearray?

时间:2017-03-26 03:58:43

标签: python csv pandas

我有一个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列表导入?

1 个答案:

答案 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