r语言 - 在python中与RDS文件交互时遇到麻烦



我想在python中打开一个关于鱼长度的RDS文件,并将其转换为基于大小和位置类的元组排序列表,执行基本统计,生成图形,并将结果保存在. csv中。我正在使用pyreadr,我已经能够将文件读取为OrderedDict(使用type(result) <class 'collection.OrderedDict'>进行验证),但无法打印单行或单列。我可以打印整个数据集,但我没有控制权。

import pyreadr
myfile ='C:\Users\Tim\Downloads\fishData.RDS'
result = pyreadr.read_r(myfile)
print(result.keys())
df1=result[None]
print(df1)

我的输出…

odict_keys([None])
OrderedDict([(None,       size  fishLength     location
0      fry   10.420310  mainChannel
1      fry    9.165523  mainChannel
2      fry    7.005817  mainChannel
3      fry    7.199168   floodPlain
4      fry    3.392063  mainChannel
..     ...         ...          ...
173  smolt   31.765081   floodPlain
174  smolt   32.573470   floodPlain
175  smolt   31.204408  mainChannel
176  smolt   30.948726   floodPlain
177  smolt   28.414746  mainChannel
[178 rows x 3 columns])])
我得到我的数据,但是当我使用

len(results) 
1

这都是在一个巨大的项目,我不知道如何得到实际的长度数据来处理它。需要帮助访问单个行,以便为.CSV提取它们。

当您使用read_r函数时,它将返回一个字典,其中键是对象的名称。RDS文件是单个序列化的R对象(与RData文件相反,RData文件可以存储多个R对象),因此字典中只有一个对象,键为None。下面是一个简单的例子:

<<p>R代码/strong>
df <- data.frame(x=11:20,
y=sin(1:10),
z=rep(c('foo', 'bar'), each=5)
)
saveRDS(df, 'file.rds')

Python代码

import pyreadr
result = pyreadr.read_r('file.rds')
result[None]
x         y    z
0  11  0.841471  foo
1  12  0.909297  foo
2  13  0.141120  foo
3  14 -0.756802  foo
4  15 -0.958924  foo
5  16 -0.279415  bar
6  17  0.656987  bar
7  18  0.989358  bar
8  19  0.412118  bar
9  20 -0.544021  bar

您仍然试图将len函数应用于字典。您应该将实际的数据帧保存到一个新对象中,并对其进行操作。例如

In [2]: df = pyreadr.read_r("file.rds")[None]
In [3]: len(df)
Out[3]: 10
In [4]: df['x']*42
Out[4]: 
0    462
1    504
2    546
3    588
4    630
5    672
6    714
7    756
8    798
9    840
Name: x, dtype: int32

相关内容

  • 没有找到相关文章

最新更新