如何将带字节的Python列表转换为Pandas DataFrame?

wfypjpf4  于 2023-02-02  发布在  Python
关注(0)|答案(2)|浏览(173)

输入为:rec = [b'1674278797,14.33681', b'1674278798,6.03617', b'1674278799,12.78418']我想得到一个DataFrame,如下所示:

df
    timestamp       val
0  1674278797  14.33681
1  1674278798   6.03617
2  1674278799  12.78418

最有效的方法是什么?谢谢!
如果我可以像[[1674278797,14.33681], [1674278798,6.03617], [1674278799,12.78418]]一样转换rec,调用df = pd.DataFrame(rec, columns=['timestamp','val'])对我来说会很容易,但是我不知道如何快速转换。
顺便说一句,我从Redis列表中得到了rec。如果需要的话,我可以修改每个元素的格式(例如,b '1674278797,14.33681'是一个元素)。

yeotifhr

yeotifhr1#

如果不能直接处理原始输入,可以使用:

(pd.Series([x.decode('utf-8') for x in rec])
   .str.split(',', expand=True).convert_dtypes()
   .set_axis(['timestamp', 'val'], axis=1)
)

或者:

import io

pd.read_csv(io.StringIO('\n'.join([x.decode('utf-8') for x in rec])),
            header=None, names=['timestamp', 'val'])

输出:

timestamp       val
0  1674278797  14.33681
1  1674278798   6.03617
2  1674278799  12.78418
kcugc4gi

kcugc4gi2#

您可以在一行中完成此操作:

pd.DataFrame([x.decode().split(",") for x in rec], columns=["timestamp","val"])

返回

timestamp       val
0  1674278797  14.33681
1  1674278798   6.03617
2  1674278799  12.78418

如果您想转换列的数据类型,可以在行尾添加.astype({"timestamp": "int64", "val": "float64"})

相关问题