我有一个 Rpy2 数据框作为<class 'rpy2.robjects.vectors.DataFrame'>
. 如何将其转换为 Python 列表或每行作为元素的元组?谢谢!
问问题
1013 次
2 回答
1
我想到了。如果您正在寻找答案,我希望这会有所帮助:
output = [tuple([df[j][i] for j in range(df.ncol)]) for i in range(df.nrow)]
于 2013-06-25T16:11:37.210 回答
1
我最近偶然发现了一个潜在的问题。给定来自 R 的数据框:
| | 一个 | c | 乙 | d | |---|-------|---|---|-----| | 1 | 信息1 | 2 | 1 | op1 | | 2 | 信息2 | 3 | 2 | 3 | | 3 | 信息3 | 4 | 3 | 3 | | 4 | 信息4 | 5 | 4 | 3 | | 5 | 信息5 | 6 | 5 | 3 | | 6 | 信息6 | 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)
输出是一个带有列名到值映射的字典。使用循环并转置列表列表将根据需要生成输出。
于 2014-05-26T21:36:08.590 回答