2015-06-24 3 views
2

Я пытаюсь запустить следующий код в кадре данных R с помощью Python.Загрузить кадр данных R в Python и преобразовать в кадр данных Pandas

from fuzzywuzzy import fuzz 
from fuzzywuzzy import process 
import os 
import pandas as pd 
import timeit 
from rpy2.robjects import r 
from rpy2.robjects import pandas2ri 
pandas2ri.activate() 

start = timeit.default_timer() 

def f(x): 
    return fuzz.partial_ratio(str(x["sig1"]),str(x["sig2"])) 

def fu_match(file): 
    f1=r.load(file) 
    f1=pandas2ri.ri2py(f1) 
    f1["partial_ratio"]=f1.apply(f, axis=1) 
    f1=f1.loc[f1["partial_ratio"]>90] 
    f1.to_csv("test.csv") 

stop = timeit.default_timer() 
print stop - start 

fu_match('test_full.RData') 

Произошла ошибка.

AttributeError: 'numpy.ndarray' object has no attribute 'apply' 

Я предполагаю, что проблема связана с преобразованием из кадра данных R в Pandas. Я знаю, что это повторяющийся вопрос, но я пробовал все решения, поставленные на предыдущие вопросы, без успеха.

Пожалуйста, любая помощь будет очень признательна.

EDIT: Вот глава .RData.

city       sig1       sig2 
1 19 claudiopillonrobertoscolari almeidabartolomeufrancisco 
2 19 claudiopillonrobertoscolari cruzricardosantasergiosilva 
3 19 claudiopillonrobertoscolari    costajorgesilva 
4 19 claudiopillonrobertoscolari costafrancisconaifesilva 
5 19 claudiopillonrobertoscolari   camarajoseluizreis 
6 19 claudiopillonrobertoscolari almeidafilhojoaopimentel 

ответ

3

Эта линия

f1=pandas2ri.ri2py(f1) 

устанавливает f1 быть numpy.ndarray, когда я думаю, что вы ожидаете, что это будет pandas.DataFrame.

Вы можете привести массив в DataFrame с чем-то вроде

f1 = pd.DataFrame(data=f1) 

, но вы не будете иметь имена столбцов определяется (которые вы используете в f(x)). Какая структура test_full.RData? Вы хотите вручную определить имена столбцов? Если это так

f1 = pd.DataFrame(data=f1, columns=("my", "column", "names")) 

должен сделать трюк.

BUT Я бы предложил вам использовать более стандартный формат данных, возможно .csv. pandas имеет хорошую поддержку для этого, и я ожидаю, что R тоже. Выезд thedocs.

+0

Спасибо @danodonovan. Я сделал так, как вы сказали, и я получаю эту новую ошибку. $ ValueError: Форма переданных значений (1, 2), индексы подразумевают (3, 2) $. Код работает, когда я читаю тестовые данные в csv. Проблема в том, что набор данных огромен, и преобразование его в cvs дает мне 50-гигабайтный файл. .RData более эффективен при хранении. – Aline

+0

Я добавил к заголовку кадра данных. – Aline

+0

Без полной ошибки трассировки я не могу помочь, какая линия производит ValueError? Пинг меня, если вы хотите переместить это в чат http://chat.stackoverflow.com/rooms/81406/q-load-r-data-frame-into-python-and-convert-to-pandas-data- frame – danodonovan