将 pandas 数据框列从十六进制字符串转换为 int
Posted
技术标签:
【中文标题】将 pandas 数据框列从十六进制字符串转换为 int【英文标题】:convert pandas dataframe column from hex string to int 【发布时间】:2016-10-23 16:14:33 【问题描述】:我有一个非常大的数据框,我想避免遍历每一行,并希望将整列从十六进制字符串转换为整数。它不能使用 astype 正确处理字符串,但单个条目没有问题。有没有办法告诉 astype 数据类型是以 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)
中读取它,所以如果有办法读取它并明确告诉它格式是什么,那就更好了!
【问题讨论】:
【参考方案1】:您可以按照@Andrew's solution 使用apply
,但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))
【讨论】:
【参考方案2】:你可以使用apply
。
df.Command0.apply(lambda x: int(x, 16))
>>>
0 456
1 195
Name: Command0, dtype: int64
您可以使用converters
参数调用pd.read_csv
来做到这一点:
df = pd.read_csv("path.txt", converters="Command0": lambda x: int(x, 16))
【讨论】:
感谢您的回答。我还发现,只要您明确告诉它转换器情况下的基数,您就不需要应用“0x”。df = pd.read_csv(open_csv, nrows=20, converters = 'Command0': lambda x: int(x,16))
【参考方案3】:
反向操作(浮点到十六进制无损转换)将是:
df['Command0'].apply(float.hex)
【讨论】:
以上是关于将 pandas 数据框列从十六进制字符串转换为 int的主要内容,如果未能解决你的问题,请参考以下文章
将 pandas 列从字符串 Quarters 和 Years 数组转换为 datetime 列
Pandas:如何将数据框列中的“时间戳”值从对象/字符串转换为时间戳?