2017-08-10 39 views
-3

我有一个包含整数和字符串的列的熊猫数据框。将字符串(来自也包含整数的熊猫数据帧列)转换为整数

我想保留整数,并只使用int.from_bytes方法将该列的字符串转换为整数。这可能吗?

你会建议的其他方式吗?

我需要总是将出现在此列中的任何字符串(通常是最多3个字符的字符串)转换为相同的唯一整数。谢谢。

编辑:

道歉已故答​​复和混乱的问题。其实我尝试了各种不起作用的东西,但我的问题肯定不够清楚。为了说明这个问题,首先要考虑的是,你可以用下面的代码转换字符的字符串转换成整数:

int.from_bytes(bytearray('CD', 'ascii'), byteorder='big', signed=False) 

其中,“CD”是我要转换成整数的字符串。在这种情况下,'CD'被转换为int 17220.'C2'将被转换为17202.

在我的情况中,我有一个包含整数和字符串的列。字符串通常是2或3个字符串,例如上面提到的字符串。我想要转换此列,保留整数,然后使用上述方法将字符串转换为整数。因此,例如一列[1,'CD',2,'C2']应该被转换为[1,17220,2,17202]。

从@AlexanderMcFarlane的答案,我设法找到了这样一个解决方案:

import re 
regex = re.compile(r"[-+]?\d+(\.0*)?$") 

def is_int(v): 
    return regex.match(str(v).strip()) is not None 

def string_int(x): 
    if is_int(x): 
     return int(float(x)) 
    else: 
     return int.from_bytes(bytearray(x, 'ascii'), byteorder='big', signed=False) 

x = [1, 'CD', 2, 'C2', '5'] 
df = pd.DataFrame(x, columns=['col']) 

In: df 
Out:  col 
    0 1 
    1 CD 
    2 2 
    3 C2 
    4 5 

In: df['col']=df['col'].apply(string_int) 
    df 
Out:  col 
    0 1 
    1 17220 
    2 2 
    3 17202 
    4 5 

我会感谢您的反馈。和许多感谢@AlexanderMcFarlane

+0

样本数据,输出操作,你尝试过这么远吗? – Zero

+0

请向我们展示您的努力! SO不是一种编码服务,但我们'都'愿意提供帮助。并且最后举一个例子说明你有什么和想要什么,以便我们更好地理解这个问题。然后你可能会得到你想要的答案。 –

+0

@MarvinTaschenberger我认为这是相当明显的 –

回答

0

使用这些功能

import re 
regex = re.compile(r"[-+]?\d+(\.0*)?$") 

def is_int(v): 
    return regex.match(str(v).strip()) is not None 

def safe_int(x): 
    if is_int(x): 
     return int(float(x)) 
    else: 
     return x 

然后在

df[column] = df[column].apply(safe_int) 

In [17]: map(safe_int, ['1.0', '1', 's', '23546.fdf']) 
Out[17]: [1, 1, 's', '23546.fdf'] 
+0

我每天使用这个确切的逻辑来将数百万个字符串转换为整数 - 因此downvote并不反映正确性 –

+0

我的猜测是downvoter不喜欢你的假设回答。例如,有不能在列中转换为整数的字符串,或者OP希望将这些无效字符串保留为列中的字符串(这些细节当前不可能基于OP的问题模糊性来确定)。因为如果这些假设不是这种情况,他们可能会逃避一些简单的事情。 – miradulo

+0

是的没有后顾之忧我只是想澄清这是转换的绝对万无一失的方法,看到了一个机会展示我的宝贝,并帮助别人:) –