【问题标题】:How to Convert Python List with Bytes to Pandas DataFrame?如何将带有字节的 Python 列表转换为 Pandas DataFrame?
【发布时间】:2023-02-02 15:52:51
【问题描述】:

输入如下: rec = [b'1674278797,14.33681', b'1674278798,6.03617', b'1674278799,12.78418'] 我想得到一个像这样的数据框:

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

什么是最有效的方法?谢谢!

如果我可以像这样转换 rec [[1674278797,14.33681], [1674278798,6.03617], [1674278799,12.78418]] 打电话对我来说很容易 df = pd.DataFrame(rec, columns=['timestamp','val']) 但我不知道如何快速进行转换。

顺便说一句,我从 Redis 列表中获得了 rec。如果需要,我可以修改每个元素的格式(例如,b'1674278797,14.33681' 是一个元素)。

【问题讨论】:

  • 这个输入是从哪里来的?这看起来像是尝试将 ASCII 字符串读取为原始字节而不是字符串。或者更确切地说,文件中的行作为原始字节,而不是单个字符串。它是远的让 Pandas 加载原始数据比尝试使其与转换后的数据一起工作更容易。 pd.read_csv(the_original_file) 就可以了

标签: python pandas dataframe


【解决方案1】:

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

(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('
'.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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-23
    • 2021-11-10
    • 2014-01-05
    • 2021-11-28
    • 1970-01-01
    相关资源
    最近更新 更多