我想在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
。下面是一个简单的例子:
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