2013-07-21 2 views
1

Я пытаюсь сделать простейший возможный инструмент отображения объектов с помощью python3. Две цели: получить лучшие характеристики и понять, как программировать питон :)Самый простой способ отображения объектов в python

Вот мой код, он не работает:

import pandas as pd 
source = pd.DataFrame({'Country' : ['USA', 'USA', 'Russia','USA'], 
        'City' : ['New-York1', 'New-York', 'Sankt-Petersburg', 'New-York']}) 

#trim column value selecting first two symbols 
def s_trim(x): 
    return x[:2] 

#make new column from two selecting first two symbols from each 
def s_trim_concat(x,y): 
    return '%s-%s' % (x[:2],y[:2]) 

features = [ 
    ('trim',['Country'],s_trim), 
    ('trim1',['Country','City'],s_trim_concat), 
    ('trim2',['City','Country'],s_trim_concat) 
    ] 

for feature_name, columns, func in features: 
    source[feature_name] = source[columns].apply(func, axis=1) 

print(source) 

UPDATE: Теперь код работает, но у меня пришлось усложнить функции, поэтому я до сих пор ищу хорошие решения, что позволяет использовать простые функции без преобразования типов внутри:

import pandas as pd 
source = pd.DataFrame({'Country' : ['USA', 'USA', 'Russia','USA'], 
        'City' : ['New-York1', 'New-York', 'Sankt-Petersburg', 'New-York']}) 

#trim column value selecting first two symbols 
def s_trim(x): 
    return x.str[:2] 

#make new column from two selecting first two symbols from each 
def s_trim_concat(row): 
    x = row[0] 
    y = row[1] 
    return '%s-%s' % (x[:2],y[:2]) 

features = [ 
    ('trim',['Country'],s_trim), 
    ('trim1',['Country','City'],s_trim_concat), 
    ('trim2',['City','Country'],s_trim_concat) 
    ] 

for feature_name, columns, func in features: 
    if len(columns) == 1: 
     source[feature_name] = source[columns].apply(func) 
    else: 
     source[feature_name] = source[columns].apply(func, axis=1) 
print(source) 
+0

Что это должен делать? – user2357112

+0

Перед решением задач классификации или регрессии я хочу добавить новые преобразованные столбцы, то есть очистить исходные данные или нормализовать их. –

+0

В моем примере кода я ожидаю, что s_trim для столбца cat для двух символов и s_trim_concat - чтобы сделать один столбец из двух. То есть для «США», «Нью-Йорк», чтобы получить «US-Ne» –

ответ

0

Вероятно, я нашел решение:

import pandas as pd 
source = pd.DataFrame({'Country' : ['USA', 'USA', 'Russia','USA'], 
        'City' : ['New-York1', 'New-York', 'Sankt-Petersburg', 'New-York']}) 

#trim column value selecting first two symbols 
def s_trim(x): 
    return x.str[:2] 

#make new column from two selecting first two symbols from each 
def s_trim_concat(x,y): 
    return '%s-%s' % (x[:2],y[:2]) 

features = [ 
    ('trim',['Country'],s_trim), 
    ('trim1',['Country','City'],s_trim_concat), 
    ('trim2',['City','Country'],s_trim_concat) 
    ] 

for feature_name, columns, func in features: 
    source[feature_name] = source[columns].apply(
     func if len(columns) == 1 
     else lambda x: func(x[0],x[1]), axis=1) 
print(source) 
0

Я думаю, что проблема в том, что вы передаете список в s_trim_concat, а не два отдельных аргументов ,

Можете ли вы предоставить образец того, как должен выглядеть конечный результат для этого примера. Для начала мне нужно уточнить, к какому ключу должно быть привязано значение, возвращаемое из s_trim_concat?

UPDATE

Попробуйте это:

import pandas as pd 
source = pd.DataFrame({'Country' : ['USA', 'USA', 'Russia','USA'], 
        'City' : ['New-York1', 'New-York', 'Sankt-Petersburg', 'New-York']}) 

#trim column value selecting first two symbols 
def s_trim(x): 
    return x[:2] 

#make new column from two selecting first two symbols from each 
def s_trim_concat(x,y): 
    return '%s-%s' % (x[:2],y[:2]) 

features = [ 
    ('trim',['Country'],s_trim), 
    ('trim1',['Country','City'],s_trim_concat), 
    ('trim2',['City','Country'],s_trim_concat) 
    ] 

for feature_name, columns, func in features: 
    source[feature_name] = apply(func, columns) 

print(source) 
+0

Я собираюсь получить «обрезку» как «США», «США», «Ru», «США» и «trim1», как «США -Не ',' US-Ne ',' Ru-Sa ',' US-Ne '. В моем сообщении я неправильно указываю имена столбцов, исправлены. –

+0

@ViacheslavNefedov обновленный ответ выше. – ChrisProsser

+0

Функция apply() не работает в вашем решении - python не может ее найти –

Смежные вопросы