【发布时间】:2014-01-13 10:36:29
【问题描述】:
我有一个脚本可以为我做事,但效率很低。我向代码审查者寻求一些帮助,并被告知尝试使用 Pandas。这就是我所做的,但我很难理解它是如何工作的。我已尝试阅读此处的文档和其他问题,但找不到任何答案。
所以,我有一个包含少量行(20 到几百)和少量列的数据框。我使用 read_table pandas 函数来获取 .txt 格式的原始数据,如下所示:
[ID1, Gene1, Sequence1, Ratio1, Ratio2, Ratio3]
[ID1, Gene1, Sequence2, Ratio1, Ratio2, Ratio3]
[ID2, Gene2, Sequence3, Ratio1, Ratio2, Ratio3]
[ID2, Gene3, Sequence4, Ratio1, Ratio2, Ratio3]
[ID3, Gene3, Sequence5, Ratio1, Ratio2, Ratio3]
...还有一大堆不重要的列。
我想要做的是从每个序列中选择所有比率并对它们执行一些计算和统计(即每个序列的所有 3 个比率)。我试过了
df.groupby('Sequence')
for col in df:
do something / print(col) / print(col[0])
...但这只会让我更加困惑。如果我通过 print(col),我会打印出某种 df 构造,而如果我通过 print(col[0]),我只会得到序列。据我在构造中看到的,我应该仍然拥有所有其他列及其数据,因为 groupby() 不会删除任何数据,它只是按某个输入列对它进行分组。我做错了什么?
虽然我还没有走到那一步,但由于上述问题,我还希望我的脚本能够选择每个 ID 的所有比率并对它们执行相同的计算,但这次是每个比率本身(即 ID1 的所有行的 Ratio1,Ratio2 相同,等等)。最后,对每个基因做同样的事情。
编辑:
所以,假设我想对行中的每个比率执行此计算,然后取三个结果值的中位数:
df[Value1] = spike[data['ID']] / float(data['Ratio 1]) * (10**-12) * (6.022*10**23) / (1*10**6)
df[Value2] = spike[data['ID']] / float(data['Ratio 2]) * (10**-12) * (6.022*10**23) / (1*10**6)
df[Value3] = spike[data['ID']] / float(data['Ratio 3]) * (10**-12) * (6.022*10**23) / (1*10**6)
... 其中spike 是字典,键是ID。忽略 dict 部分,我可以进行计算(谢谢!),但是如何使用数据框 ID 访问字典?使用上面的代码,我只得到一个“Unhashable type: Series”错误。
以下是一些真实数据:
ID Gene Sequence Ratio1 Ratio2 Ratio3
1 KRAS SFEDXXYR 15.822 14.119 14.488
2 KRAS VEDAXXXLVR 9.8455 8.9279 16.911
3 ELK4 IEXXXCESLNK 15.745 7.9122 9.5966
3 ELK4 IEGXXXSLNKR 1.177 NaN 12.073
【问题讨论】:
-
你能给出一个小但有真实数据的样本数据集吗?所以我们可以试试这些功能。