Kid*_*udi 7 python r dataframe rpy2
我有一个pandas数据帧,我使用pandas.rpy.common中的convert_to_r_dataframe方法转换为R dataframe.我把它设置为这样:
self.event = pd.read_csv('C://' + self.event_var.get() + '.csv')
final_products = pd.DataFrame({'Product': self.event.Product, 'Size': self.event.Size, 'Order': self.event.Order})
r.assign('final_products', com.convert_to_r_dataframe(final_products))
r.assign('EventName', self.event_var.get())
r.assign('EventTime', self.eventtime_var.get())
r.source('application.r')
Run Code Online (Sandbox Code Playgroud)
self.event_var.get()在GUI中检索用户输入(我正在使用Tkinter创建应用程序).产品,尺寸和订单是CSV文件中的列.
由于Rpy2在Python中设置R环境,我希望R环境能够理解final_products R数据帧.不幸的是,当R脚本运行时,它没有给出正确的结果(我使用R脚本创建图形,但是当程序终止时它们只是空的).但是,EventName和EventTime变量确实有效.这里有什么我想念的吗?为什么在R环境中没有正确解释为什么在Python中分配R数据帧的想法?
获得的错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1470, in __call__
return self.func(*args)
File "G:\Development\workspace\GUI\GUI.py", line 126, in evaluate
r.source('application.r')
File "C:\Python27\lib\site-packages\rpy2\robjects\functions.py", line 86, in __call__
return super(SignatureTranslatedFunction, self).__call__(*args, **kwargs)
File "C:\Python27\lib\site-packages\rpy2\robjects\functions.py", line 35, in __call__
res = super(Function, self).__call__(*new_args, **new_kwargs)
Run Code Online (Sandbox Code Playgroud)
很棒的答案 @Mittenchops.由于不推荐使用convert_to_r_dataframe.使用rpy2接口更新上面的示例
from rpy2.robjects import pandas2ri
pandas2ri.activate()
import pandas as pd
import numpy as np
from datetime import datetime
n = 10
df = pd.DataFrame({
"timestamp": [datetime.now() for t in range(n)],
"value": np.random.uniform(-1, 1, n)
})
r_dataframe = pandas2ri.py2ri(df)
print(r_dataframe)
Run Code Online (Sandbox Code Playgroud)
不幸的是,这将很困难,因为 Python -> R 转换比以前更好,但并不完美,并且目前在 Windows 上仍然很困难,看起来您正在使用它。
这有点像黑客,但作为一种解决方法,您可以在将 DataFrame转换为 R 之前在分配 pd.DataFrame 时尝试设置名称和时间变量。
一旦进入 R,您将需要使用 R 函数来操作数据框,而不是 Python 函数——甚至您的 getter 和 setter 也需要以如下所示的方式传递到 R 环境中:
myfunct = robjects.r('''
f <- function(r, verbose=FALSE) {
if (verbose) {
cat("I am calling f().\n")
}
2 * pi * r
}
f(3)
''')
Run Code Online (Sandbox Code Playgroud)
从这里。
但为了首先检查您的 DataFrame 是否已正确转换,您可以通过运行以下命令来开始调试:
import pandas as pd
import numpy as np
import pandas.rpy.common as com
from datetime import datetime
n = 10
df = pd.DataFrame({
"timestamp": [datetime.now() for t in range(n)],
"value": np.random.uniform(-1, 1, n)
})
r_dataframe = com.convert_to_r_dataframe(df)
print(r_dataframe)
Run Code Online (Sandbox Code Playgroud)
是否会生成类似于数据帧的 R 打印语句的内容,如下所示
>>> timestamp value
0 2014-06-03 15:02:20 -0.36672....
1 2014-06-03 15:02:20 -0.89136....
2 2014-06-03 15:02:20 0.509215....
3 2014-06-03 15:02:20 0.862909....
4 2014-06-03 15:02:20 0.389879....
5 2014-06-03 15:02:20 -0.80607....
6 2014-06-03 15:02:20 -0.97116....
7 2014-06-03 15:02:20 0.376419....
8 2014-06-03 15:02:20 0.848243....
9 2014-06-03 15:02:20 0.446798....
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4423 次 |
| 最近记录: |