我有一个Rpy2数据框为<class 'rpy2.robjects.vectors.DataFrame'>
。如何将每行作为元素转换为Python列表或元组?谢谢!
答案 0 :(得分:1)
我明白了。如果您正在寻找答案,我希望这会有所帮助:
output = [tuple([df[j][i] for j in range(df.ncol)]) for i in range(df.nrow)]
答案 1 :(得分:1)
我最近偶然发现了一个潜在的问题。给定来自R的数据框:
| | a | c | b | d | |---|-------|---|---|-----| | 1 | info1 | 2 | 1 | op1 | | 2 | info2 | 3 | 2 | 3 | | 3 | info3 | 4 | 3 | 3 | | 4 | info4 | 5 | 4 | 3 | | 5 | info5 | 6 | 5 | 3 | | 6 | info6 | 7 | 6 | 3 | | 7 | 9 | 8 | 7 | 3 |
(是的我知道 - 一列中的混合数据类型,即str和float可能不太现实,但对于仅有因素的列,情况也是如此)
转换将显示列a和d的索引,而不是通常预期的实际值。问题如rpy2手册中所述:
R的因素有点奇怪:它们旨在表示标记的记忆效率矢量,并且为了实现它,将其实现为整数向量,其与标签的(可能更短的)矢量相关联。每个整数表示标签在相关标签矢量中的位置。
以下粗略草案代码是处理此案例的一步:
colnames = list(dataframe.colnames)
rownames=list(dataframe.rownames)
col2data = []
for cn,col in dataframe.items():
if isinstance(col,robjects.vectors.FactorVector) is True:
colevel = tuple(col.levels)
col = tuple(col)
ncol = []
for i in col:
k=i-1
ncol.append(colevel[k])
else:
ncol = tuple(col)
col2data.append((cn,ncol))
col2data.append(('rownames',rownames))
col2data = dict(col2data)
输出是一个带有列名到值映射的dict。使用循环并转置列表列表将根据需要生成输出。