这是我的示例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'上创建索引。
答案 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
上面的代码确保我们在这三行的末尾有一个数据帧。