熊猫字符串按字符转换为整数

Posted

技术标签:

【中文标题】熊猫字符串按字符转换为整数【英文标题】:Pandas String to Integer by Character 【发布时间】:2017-03-28 07:51:14 【问题描述】:

在 Pandas 数据框列中,我想将字符串中的每个字符转换为整数(就像使用 ord() 所做的那样)并在左侧添加 100。我知道如何使用常规字符串来做到这一点:

st = "JOHNSMITH4817001141979"
a=[ord(x) for x in st]
b=[]
for x in a:
    b.append(':03'.format(x)) #Add leading zero, ensuring 3 digits
b=['100']+b
b=''.join([ "%s"%x for x in b])
b=int(b)
b

结果:100074079072078083077073084072052056049055048048049049052049057055057

但是,如果我想对像这样的 Pandas 数据框中的列的每个单元格执行此操作怎么办?

import pandas as pd
df = pd.DataFrame('string':['JOHNSMITH4817001141979','JOHNSMYTHE4817001141979'])
df

    string
0   JOHNSMITH4817001141979
1   JOHNSMYTHE4817001141979

我只需要一个单独的列,将结果作为“字符串”中每个单元格的整数。

提前致谢!

【问题讨论】:

【参考方案1】:

首先,您将处理链转换为一个函数,例如:

def get_it(a):
    a=[ord(x) for x in st]
    b=[]
    for x in a:
        b.append(':03'.format(x)) #Add leading zero, ensuring 3 digits
    b=['100']+b
    b=''.join([ "%s"%x for x in b])
    return int(b)

然后你对列中的每个元素迭代地调用它,并使这个列表成为新列

df['result'] = [get_it(i) for i in df['string']]

虽然这确实有效,但我认为您可以通过优化流程“get_it”找到更好的解决方案

【讨论】:

【参考方案2】:

此外,您还可以执行以下操作:

def get_it(a):
a=[ord(x) for x in st]
b=[]
for x in a:
    b.append(':03'.format(x)) #Add leading zero, ensuring 3 digits
b=['100']+b
b=''.join([ "%s"%x for x in b])
return int(b)
df['result'] = df['string'].apply(get_it)

【讨论】:

您好,为了帮助其他人理解您的答案,请考虑包含对您的代码的简短描述以及它如何解决发布的问题。【参考方案3】:

如果你想要一个单行(Python 3.6+)

import pandas as pd
df = pd.DataFrame('string':['JOHNSMITH4817001141979','JOHNSMYTHE4817001141979'])

df['string'].apply(lambda x:''.join(['100']+[f'ord(i):03' for i in x])).astype(int)

对于 Python

【讨论】:

以上是关于熊猫字符串按字符转换为整数的主要内容,如果未能解决你的问题,请参考以下文章

熊猫:将 dtype 'object' 转换为 int

在熊猫中将字符串转换为timedelta

如何将熊猫中的timedelta列转换为字符串

在熊猫中将字符串转换为小写[重复]

将一列字符串转换为熊猫列表

熊猫将数字转换为字符串 - 意外结果