将 pandas dataframe 列从十六进制字符串转换为 int

新手上路,请多包涵

我有一个非常大的数据框,我想避免遍历每一行,并希望将整个列从十六进制字符串转换为 int。它不能使用 astype 正确处理字符串,但单个条目没有问题。有没有办法告诉 astype 数据类型是 base 16?

 IN:
import pandas as pd
df = pd.DataFrame(['1C8','0C3'], columns=['Command0'])
df['Command0'].astype(int)
OUT:
ValueError: invalid literal for int() with base10: '1C8'

这可行,但要避免行迭代。

 for index, row in df.iterrows():
    print(row['Command0'])

我正在从 CSV 中读取它 pd.read_csv(open_csv, nrows=20) 因此,如果有一种方法可以读取它并明确告诉它格式是什么,那就更好了!

原文由 kaminsknator 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.1k
2 个回答

您可以使用 apply

 df.Command0.apply(lambda x: int(x, 16))
>>>
0    456
1    195
Name: Command0, dtype: int64

您可以使用 pd.read_csv 调用来执行此操作 converters 参数:

 df = pd.read_csv("path.txt", converters={"Command0": lambda x: int(x, 16)})

原文由 andrew 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用 apply 按照@Andrew 的解决方案,但是 lambda 不是必需的并且会增加开销。相反,使用 apply 和关键字参数:

 res = df['Command0'].apply(int, base=16)

print(res)

0    456
1    195
Name: Command0, dtype: int64

使用 pd.read_csv ,您可以使用 functools.partial

 from functools import partial

df = pd.read_csv(open_csv, nrows=20, converters={'Command0': partial(int, base=16)})

原文由 jpp 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题