Pandas 字符串按字符转整数

Pandas String to Integer by Character

在 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

我只需要一个单独的列,将 'string' 中每个单元格的结果作为整数。

提前致谢!

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

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"

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

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)

如果你想要单线(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 < 3.6,将 f-format 替换为 '{ord(i):03}'.format(i=i)。我所做的是将您的函数转换为 lambda 表达式并将其应用于列。