【发布时间】:2018-01-18 23:15:55
【问题描述】:
我有一个 pandas 数据框,其中有一列包含整数和字符串。
我想保留整数并使用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
【问题讨论】:
-
样本数据,输出,到目前为止你尝试了什么?
-
请向我们展示你的努力! SO 不是编码服务,但我们“都”愿意提供帮助。并发布一个示例,说明您最终拥有什么以及您想要什么,以便我们更好地了解问题。那么你可能会得到你想要的答案。
-
@MarvinTaschenberger 我认为这很明显