如何在pandas中以十六进制显示/打印列?

1 投票
2 回答
34 浏览
提问于 2025-04-14 16:56

假设我有以下这些数据作为起点:

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

撰写回答