【问题标题】:convert pandas dataframe column from hex string to int将 pandas 数据框列从十六进制字符串转换为 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) 中读取它,所以如果有办法读取它并明确告诉它格式是什么,那就更好了!

【问题讨论】:

    标签: python python-3.x pandas dataframe hex


    【解决方案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)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-18
        • 1970-01-01
        • 2018-03-20
        • 2017-10-09
        相关资源
        最近更新 更多