pandas替换字节对象b' \ x00'用字符串

时间:2018-01-31 17:21:52

标签: python-3.x pandas dataframe replace byte

我有一个Dataframe,其列包含字节对象b'\x00'b'\x08'。我想用相应的字符串'00'替换为'08'

使用b'\x01'中的dict可以轻松替换b'\x08'dataframe.replace的字节对象。

然而,b' \ x00'不起作用。这是我的考试。

我的python版本是

  

' 3.6.3 | Anaconda custom(64位)| (默认,2017年11月8日,15:10:56)[MSC v.1900 64 bit(AMD64)]'。熊猫已预先安装。

bytes_list=[b'\x00',b'\x01',b'\x02',b'\x03',b'\x04',b'\x05',b'\x06',b'\x07',b'\x08']

bytes_df=pd.DataFrame({"bytes":bytes_list})

replacements = {b'\x00': '00',b'\x01': '01',b'\x02': '02',b'\x03': '03',b'\x04': '04'
               ,b'\x05': '05',b'\x06': '06',b'\x07': '07',b'\x08': '08'}

bytes_df.replace(replacements,inplace=True)

print(bytes_df)

输出:

      bytes
 0       b'\x00'
 1       01
 2       02
 3       03
 4       04
 5       05
 6       06
 7       07
 8       08

因此,您可以看到字节对象b'\x00'未被替换。

后来我使用带有lambda函数的applymap得到我需要的东西。

bytes_df.applymap(lambda x: x[0] if type(x) is bytes else x)

但是我仍然想知道是否还有其他简单和pythonic方式可以做同样的事情。我也想知道这是不是一个错误。

有人可以解释一下吗?

1 个答案:

答案 0 :(得分:0)

你可以规避问题:

  create_table "compositions", force: :cascade do |t|
    ...
  end

  create_table "invoices", force: :cascade do |t|
    t.integer  "composition_id"
    ...
    t.index ["composition_id"], name: "index_invoices_on_composition_id", using: :btree
  end

  create_table "scores", force: :cascade do |t|
    t.integer  "composition_id",                           null: false
    ...
  end

输出:

import pandas as pd

bytes_list=[b'\x00',b'\x01',b'\x02',b'\x03',b'\x04',b'\x05',b'\x06',b'\x07',b'\x08']

bytes_df=pd.DataFrame({ "bytes": ['0'+str(ord(x)) for x in bytes_list] }) 

print(bytes_df)