将R数据帧加载到Python并转换为Pandas数据帧

时间:2015-06-24 10:35:10

标签: python r

我正在尝试使用Python在R数据框架中运行以下代码。

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数据帧的转换有关。我知道这是一个重复的问题,但我已经尝试了以前问题的所有解决方案,但没有成功。

请,任何帮助将不胜感激。

编辑:这是.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

1 个答案:

答案 0 :(得分:3)

这一行

f1=pandas2ri.ri2py(f1)

我认为您希望f1numpy.ndarray时将pandas.DataFrame设为DataFrame

您可以使用

之类的内容将数组转换为f1 = pd.DataFrame(data=f1)
f(x)

但您未定义列名(您在test_full.RData中使用)。 f1 = pd.DataFrame(data=f1, columns=("my", "column", "names")) 的结构是什么?您想手动定义列名吗?如果是的话

.csv

应该做的伎俩。

我建议您使用更标准的数据格式,可能是pandasR对此有很好的支持,我希望<a class="menu" href="index.php">Home</a> <a class="menu" href="portfolio.php">Home</a> ... 也能做到这一点。查看the docs