我正在尝试使用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
答案 0 :(得分: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"))
的结构是什么?您想手动定义列名吗?如果是的话
.csv
应该做的伎俩。
但我建议您使用更标准的数据格式,可能是pandas
。 R
对此有很好的支持,我希望<a class="menu" href="index.php">Home</a>
<a class="menu" href="portfolio.php">Home</a>
...
也能做到这一点。查看the docs。