我有一个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方式可以做同样的事情。我也想知道这是不是一个错误。
有人可以解释一下吗?
答案 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)