如何在pandas中以十六进制显示/打印列?
假设我有以下这些数据作为起点:
import pandas as pd
data = [
{"colA": "hello", "colB": 22, "colC": 3.0, "colD": 123476},
{"colA": "there", "colB": 122, "colC": 4.0, "colD": 2384953},
{"colA": "world", "colB": 222, "colC": 5.0, "colD": 39506483},
]
df = pd.DataFrame(data)
with pd.option_context('display.max_rows', None, 'display.max_columns', None, 'display.width', None, 'max_colwidth', 20, 'display.float_format', "{:.2f}".format):
print(df)
它打印出:
colA colB colC colD
0 hello 22 3.00 123476
1 there 122 4.00 2384953
2 world 222 5.00 39506483
现在,我只想把整数列B打印成十六进制的格式,具体来说,就是用“0x{:02X}”这种字符串格式。
如果有的话,我可能会用到 display.int_format
,但正如在这个链接中提到的那样,这个选项并不存在……而且,就算有这样的选项,它也可能不允许我只把列B以那种方式打印出来。
另一个选择是使用 .apply()
,正如在这个链接中提到的:
# ...
df = pd.DataFrame(data)
df["colB"] = df["colB"].apply("0x{:02X}".format)
# ...
……这样就能打印出我想要的结果:
colA colB colC colD
0 hello 0x16 3.00 123476
1 there 0x7A 4.00 2384953
2 world 0xDE 5.00 39506483
……不过,这样做也会改变我表格中的数据,而我希望保留表格中的原始数据;我只是想把某些列以十六进制的形式“打印”出来。
所以,有没有办法只指定某些特定的列以十六进制的形式打印,而不改变表格中的原始数据(也不需要为了这种打印而专门复制一个新的数据框)呢?
2 个回答
2
一种方法是使用 DataFrame.style.format 这个功能,它可以让你为显示的数据设置自定义格式,而不会改变数据本身。
formatted_df = df.style.format({
"colB": "0x{:02X}".format,
})
2
你可以试着使用 pandas.io.formats.style.Styler
这个工具:
style = df.style.format({"colB": "0x{:02X}"}, precision=2)
print(style.to_string(delimiter="\t"))
打印结果是:
colA colB colC colD
0 hello 0x16 3.00 123476
1 there 0x7A 4.00 2384953
2 world 0xDE 5.00 39506483