【问题标题】:pandas dataframe.apply -- converting hex string to int numberpandas dataframe.apply - 将十六进制字符串转换为整数
【发布时间】:2017-10-09 12:35:00
【问题描述】:

我对 python 和 pandas 都很陌生。我想知道如何将数据帧元素从十六进制字符串输入转换为整数,我也遵循了以下提供的解决方案:convert pandas dataframe column from hex string to int

但是,它仍然无法正常工作。以下是我的代码:

df = pd.read_csv(filename, delim_whitespace = True, header = None, usecols = range(7,23,2))
for i in range(num_frame):
    skipheader = lineNum[header_padding + i*2]
    data = df.iloc[skipheader:skipheader + 164:2]
    data_numeric = data.apply(lambda x: int(x, 16))
    dataframe.append(data)

数据变量如下所示: data variable (type:DataFrame) 还有 spyder 中的控制台输出:enter image description here

错误发生在data_numeric = data.apply(lambda x: int(x, 16)) 错误信息是

TypeError: ("int() can't convert non-string with explicit base", u'occurred at index 7')

我也试过data_numeric = data.apply(pd.to_numeric, errors='coerce') 但是所有的十六进制数都变成了 NaN,这不是我想要的。 有什么建议?提前非常感谢!!!

【问题讨论】:

  • 您要转换的数据是分列还是分散?
  • 如果您一次在data 的一列上使用.apply(int, base=16),而不是在整个DataFrame 上使用它是否有效?这就是您链接的解决方案中所做的。
  • @wwii 是的,它是我要转换的数据。它的数据类型是数据框,所有元素都是十六进制数字。
  • @EFT 您的解决方案也适用于我!感谢帮助。我在每列上添加了一个额外的 for 循环,效果很好。

标签: python pandas dataframe


【解决方案1】:

假设我们有以下 DF:

In [62]: df
Out[62]:
     a   b    c
0  1C8  21  15F
1  0C3  B7  FFC

我们可以这样做:

In [64]: df = df.apply(lambda x: x.astype(str).map(lambda x: int(x, base=16)))

In [65]: df
Out[65]:
     a    b     c
0  456   33   351
1  195  183  4092

In [66]: df.dtypes
Out[66]:
a    int64
b    int64
c    int64
dtype: object

PS x.astype(str) 是出于安全原因 - 如果您的某些列已经是数字 dtype

【讨论】:

  • 非常感谢您的帮助!!!它工作得很好,你的解决方案让我更多地研究了 python 中的 lambda 和 map 函数!
猜你喜欢
  • 2015-11-29
  • 2017-08-06
  • 2017-08-12
  • 2014-12-15
  • 2013-12-07
相关资源
最近更新 更多