Ich versuche, eine Spalte eines Pandas-Datenrahmens in Faktor zu konvertieren, weil die Funktion, die ich in R aufrufen möchte, Faktoren erwartet.Konvertieren Pandas Dataframe Spalte zu R-Faktoren
pandas2ri.activate()
#second column of labels has to be converted to factors
labels = read_csv(path_to_csv)
as_factor = ro.r['as.factor']
output = package.function(another_df, as_factor(labels['column_name']))
Im Folgenden ist der Fehler, den ich bekommen:
rpy2.rinterface.RRuntimeError: Error in sort.list(y) : 'x' must be atomic for 'sort.list'
Have you called 'sort' on a list?
Was soll ich tun?
Reproduzierbare Beispiel unten:
import pandas as pd
df = pd.DataFrame({'Col': [10, 20],
'x': ['Control', 'Low_Cav02']})
from rpy2 import robjects as ro
from rpy2.robjects import pandas2ri
pandas2ri.activate()
as_factor = ro.r['as.factor']
labels = as_factor(df['Col'])
print labels
labels = as_factor(df['x'])
print labels
Ausgang:
[1] 10 20
Levels: 10 20
/Users/swetabh/Envs/damet/lib/python2.7/site-packages/rpy2/robjects/functions.py:106: UserWarning: Error in sort.list(y) : 'x' must be atomic for 'sort.list'
Have you called 'sort' on a list?
res = super(Function, self).__call__(*new_args, **new_kwargs)
Traceback (most recent call last):
File "damet/analysis.py", line 26, in <module>
labels = as_factor(df['x'])
File "/Users/swetabh/Envs/damet/lib/python2.7/site-packages/rpy2/robjects/functions.py", line 178, in __call__
return super(SignatureTranslatedFunction, self).__call__(*args, **kwargs)
File "/Users/swetabh/Envs/damet/lib/python2.7/site-packages/rpy2/robjects/functions.py", line 106, in __call__
res = super(Function, self).__call__(*new_args, **new_kwargs)
rpy2.rinterface.RRuntimeError: Error in sort.list(y) : 'x' must be atomic for 'sort.list'
Have you called 'sort' on a list?
könnten Sie versuchen, ein reproduzierbares Beispiel zu zeigen, dass wir auch laufen können Ihnen helfen? –
Ich weiß nicht, ob es dein Problem lösen würde, aber der Faktor von R's Faktor ist Kategorie in Pandas: 'df [" einige_Spalte "]. Astype (" Kategorie ")' – ayhan
@MathieuB Fertig. LMK, wenn das hilft. – Swetabh