2016-11-14 3 views
1

В столбце фрейма данных Pandas я хочу преобразовать каждый символ в строку в целое число (как это делается с помощью ord()) и добавить 100 влево. Я знаю, как сделать это с помощью обычной строки:Pandas String to Integer по символу

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

Но что, если я хотел, чтобы выполнить эту операцию на каждой ячейке столбца в кадре данных панды, как этот?

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»