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 表达式并将其应用于列。
在 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 表达式并将其应用于列。