5
5
6
6
import numpy as np
7
7
8
- import pandas as pn
8
+ import pandas as pd
9
+ import pandas .core .common as com
9
10
import pandas .util .testing as _test
10
11
11
12
from rpy2 .robjects .packages import importr
17
18
18
19
def load_data (name , package = None , convert = True ):
19
20
if package :
20
- pack = importr (package )
21
+ importr (package )
21
22
22
23
r .data (name )
23
24
@@ -62,9 +63,9 @@ def _convert_array(obj):
62
63
if obj .names is not None :
63
64
name_list = [list (x ) for x in obj .names ]
64
65
if len (dim ) == 2 :
65
- return pn .DataFrame (arr , index = name_list [0 ], columns = name_list [1 ])
66
+ return pd .DataFrame (arr , index = name_list [0 ], columns = name_list [1 ])
66
67
elif len (dim ) == 3 :
67
- return pn .Panel (arr , items = name_list [2 ],
68
+ return pd .Panel (arr , items = name_list [2 ],
68
69
major_axis = name_list [0 ],
69
70
minor_axis = name_list [1 ])
70
71
else :
@@ -107,11 +108,22 @@ def _convert_DataFrame(rdf):
107
108
values = _convert_vector (vec )
108
109
109
110
if isinstance (vec , robj .FactorVector ):
110
- values = np .asarray (vec .levels ).take (values - 1 )
111
+ levels = np .asarray (vec .levels )
112
+ if com .is_float_dtype (values ):
113
+ mask = np .isnan (values )
114
+ notmask = - mask
115
+ result = np .empty (len (values ), dtype = object )
116
+ result [mask ] = np .nan
117
+
118
+ locs = (values [notmask ] - 1 ).astype (np .int_ )
119
+ result [notmask ] = levels .take (locs )
120
+ values = result
121
+ else :
122
+ values = np .asarray (vec .levels ).take (values - 1 )
111
123
112
124
data [col ] = values
113
125
114
- return pn .DataFrame (data , index = _check_int (rows ), columns = columns )
126
+ return pd .DataFrame (data , index = _check_int (rows ), columns = columns )
115
127
116
128
def _convert_Matrix (mat ):
117
129
columns = mat .colnames
@@ -120,7 +132,7 @@ def _convert_Matrix(mat):
120
132
columns = None if _is_null (columns ) else list (columns )
121
133
index = None if _is_null (rows ) else list (rows )
122
134
123
- return pn .DataFrame (np .array (mat ), index = _check_int (index ),
135
+ return pd .DataFrame (np .array (mat ), index = _check_int (index ),
124
136
columns = columns )
125
137
126
138
def _check_int (vec ):
@@ -218,7 +230,7 @@ def convert_to_r_dataframe(df, strings_as_factors=False):
218
230
for column in df :
219
231
value = df [column ]
220
232
value_type = value .dtype .type
221
- value = [item if pn .notnull (item ) else NA_TYPES [value_type ]
233
+ value = [item if pd .notnull (item ) else NA_TYPES [value_type ]
222
234
for item in value ]
223
235
224
236
value = VECTOR_TYPES [value_type ](value )
@@ -311,7 +323,7 @@ def test_convert_r_dataframe():
311
323
is_na = robj .baseenv .get ("is.na" )
312
324
313
325
seriesd = _test .getSeriesData ()
314
- frame = pn .DataFrame (seriesd , columns = ['D' , 'C' , 'B' , 'A' ])
326
+ frame = pd .DataFrame (seriesd , columns = ['D' , 'C' , 'B' , 'A' ])
315
327
316
328
#Null data
317
329
frame ["E" ] = [np .nan for item in frame ["A" ]]
@@ -333,7 +345,7 @@ def test_convert_r_dataframe():
333
345
for original , converted in zip (frame [column ],
334
346
r_dataframe .rx2 (column )):
335
347
336
- if pn .isnull (original ):
348
+ if pd .isnull (original ):
337
349
assert is_na (converted )
338
350
else :
339
351
assert original == converted
@@ -343,7 +355,7 @@ def test_convert_r_matrix():
343
355
is_na = robj .baseenv .get ("is.na" )
344
356
345
357
seriesd = _test .getSeriesData ()
346
- frame = pn .DataFrame (seriesd , columns = ['D' , 'C' , 'B' , 'A' ])
358
+ frame = pd .DataFrame (seriesd , columns = ['D' , 'C' , 'B' , 'A' ])
347
359
#Null data
348
360
frame ["E" ] = [np .nan for item in frame ["A" ]]
349
361
0 commit comments