大熊猫数据帧数据检索

时间:2016-07-04 12:54:33

标签: python pandas dataframe

这是我的示例pandas数据框

              icd_code   from_date  paid_amount
claim_id                                       
CKEY-7724339    719.43  2015-09-26       300.09
CKEY-5008998     722.2  2015-04-21        11.65
CKEY-7896598       722  2015-02-23        17.19
CKEY-7758556     850.9  2014-03-13       414.02
CKEY-7749118     847.0  2012-07-18         4.42
CKEY-10383160   854.00  2015-06-16       751.68
CKEY-10678452   607.84  2015-07-07        11.13
CKEY-10734364    882.2  2015-07-22      5625.00
CKEY-3500566    307.89  2011-08-09       500.00
CKEY-10766667    344.1  2013-12-03       139.41

当我使用.loc进行检索时,输出如下

$ indexed_data.loc['CKEY-10766667']
icd_code            344.1
from_date      2013-12-03
paid_amount        139.41
Name: CKEY-10766667, dtype: object

~~~~~~~~expected output ~~~~~~~~~~
CKEY-10766667    344.1  2013-12-03       139.41

有人能指出我在上面的代码中出了什么问题

注意:我在原始数据集上调用data.set_index('claim_id')以在'claim_id'上创建索引。

1 个答案:

答案 0 :(得分:0)

使用下面的代码给了我预期的输出:

$>>> indexed_data.loc[['CKEY-8369057']] 

将单个值传递给.loc将在存在多行时返回Dataframe,如果只存在一行,则返回Series。但是将列表传递给.loc将始终返回Dataframe。

考虑执行时间,传递列表比单个元素消耗更多时间,尤其是当语句在循环内时。以下是我为实现更好的执行时间所做的工作

df = indexed_data.loc[x]
if type(df).__name__ == 'Series':
    df = df.to_frame().T

上面的代码确保我们在这三行的末尾有一个数据帧。