我正在用 Python 清理数据,但我们用于可视化的程序是为 R 设置的。我正在尝试将数据帧保存为 rda 文件。我可以在这里找到资源来开始,但是我的 df 有 92 列,当它转换为 rda 时,它有 1942 列,类似于以下内容。
import rpy2
from rpy2 import robjects
from rpy2.robjects import pandas2ri
pandas2ri.activate()
df = pd.DataFrame({'A': [1, 2, 3], 'B':[10, 9, 8], 'C':['A', 'B', 'C']})
A B C
0 1 10 A
1 2 9 B
2 3 8 C
编辑:我已经尝试了这两种转换并得到了相同的结果。
df = pandas2ri.py2ri(df)
并且
def save_rdata_file(df, filename):
r_data = pandas2ri.py2ri(df)
robjects.r.assign('my_df', r_data)
robjects.r("save(my_df, file=paste0('{}'))".format(filename))
save_rdata_file(df, file_location)
result = pd.DataFrame({'A': [1, 2, 3], 'B':[10, 9, 8], 'C':['A', 'B', 'C'],
'A.1': [1, 1, 1], 'A.2': [2, 2, 2], 'A.3':[3, 3, 3],
'B.1':[10, 10, 10], 'B.2':[9, 9, 9], 'B.3':[8, 8, 8],
'C.1':['A', 'A', 'A'], 'C.2':['B', 'B', 'B'], 'C.3':['C', 'C', 'C']})
A B C A.1 A.2 A.3 B.1 B.2 B.3 C.1 C.2 C.3
0 1 10 A 1 2 3 10 9 8 A B C
1 2 9 B 1 2 3 10 9 8 A B C
2 3 8 C 1 2 3 10 9 8 A B C
最佳答案
我认为您正在使用 @anthonybell's solution :
import rpy2
from rpy2 import robjects
from rpy2.robjects import pandas2ri
import pandas as pd
pandas2ri.activate()
df = pd.DataFrame({'A': [1, 2, 3], 'B':[10, 9, 8], 'C':['A', 'B', 'C']})
r_data = pandas2ri.py2ri(df)
robjects.r.assign("df", r_data)
robjects.r("save(df, file='test.rda')")
In R:
load("test.rda")
> ls()
[1] "df"
> str(df)
'data.frame': 3 obs. of 3 variables:
$ A: int 1 2 3
$ B: int 10 9 8
$ C: chr "A" "B" "C"
对我来说效果很好。我使用 R 3.6.1、python 3.6.10、pandas 1.0.1、rpy 2.9.4。所以下面是另一种解决方案,使用pickle,但它需要在R中使用reticulate:
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B':[10, 9, 8], 'C':['A', 'B', 'C']})
df.to_pickle("./test.pkl")
In R:
library(reticulate)
pd = import("pandas",convert=TRUE)
str(df)
'data.frame': 3 obs. of 3 variables:
$ A: num 1 2 3
$ B: num 10 9 8
$ C: chr "A" "B" "C"
- attr(*, "pandas.index")=RangeIndex(start=0, stop=3, step=1)
关于python - 将 Pandas df 转换为 rda 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60453048/