Python Pandas to R dataframe
I am going to convert Python pandas dataframe to dataframe in R. I found out few libraries for this problem
http://pandas.pydata.org/pandas-docs/stable/r_interface.html
which is rpy2
But I couldn't find the methods for saving or transfer it to R.
Firstly I tried "to_csv"
df_R = com.convert_to_r_dataframe(df_total)
df_R.to_csv(direc+"/qap/detail_summary_R/"+"distance_"+str(gp_num)+".csv",sep = ",")
But it gives me an error
"AttributeError: 'DataFrame' object has no attribute 'to_csv' "
So I tried to see its data type it was
<class 'rpy2.robjects.vectors.DataFrame'>
how could I save this type object to csv file or transfer to R?
Objects of type rpy2.robjects.vectors.DataFrame
have a method to_csvfile
, not to_csv
: http://rpy.sourceforge.net/rpy2/doc-2.4/html/vector.html#rpy2.robjects.vectors.DataFrame.to_csvfile
If wanting to pass data between Python and R, there are more efficient ways than writing and reading CSV files. Try the conversion system:
from rpy2.robjects import pandas2ri
pandas2ri.activate()
from rpy2.robjects.packages import importr
base = importr('base')
# call an R function on a Pandas DataFrame
base.summary(my_pandas_dataframe)
Once you have your data.frame you can save it using write.table
or one of the wrappers of the latter, for example writee.csv
.
In rpy2 :
import rpy2.robjects as robjects
## get a reference to the R function
write_csv = robjects.r('write.csv')
## save
write_csv(df_R,'filename.csv')
Nowadays I'd recommend feather, a serialization format built on Apache Arrow. It was explicitly developed by the creators of RStudio/ggplot2/etc (Hadley Wickham) and pandas (Wes McKinney) for performance and interoperability between Python and R (see here).
You need pandas verson 0.20.0+, pip install feather-format
, then you can use the to_feather
/ read_feather
operations as drop-in replacements for to_csv
/ read_csv
:
df_R.to_feather('filename.feather')
df_R = pd.read_feather('filename.feather')
The R
equivalents (using the package feather
) are
df <- feather::read_feather('filename.feather')
feather::write_feather(df, 'filename.feather')
Besides some minor tweaks (eg you can't save custom DataFrame indexes in feather, so you'll need to call df.reset_index()
first), this is a fast and easy drop-in replacement for csv
, pickle
, etc.
下一篇: Python熊猫到R数据框