我尝试使用多索引数据框作为字典以快速方式检索感兴趣的行。我使用.ix []方法通过它的多索引选择一行,但是当密钥不存在时遇到异常。有没有办法获得带有defualt返回值的行?或者我必须使用try-except组合来做我需要的吗?
示例:
df = DataFrame({'a':[1,2,3],'b':[1,2,3],'c':[1,2,3]})
df.set_index(['a','b'])
c
a b
1 1 1
2 2 2
3 3 3
现在尝试df.ix[1,5]
时我得到一个例外,想得到一个默认值。
修改
这就是首先提出问题的原因。我有2个大数据帧(一个有20,000行,另一个有500,000)行。两个表中的每一行都标记一个单词识别事件。列是" fileName"," Word"," startTime"," endTime"。
我想要做的是在df2中找出小df(df1)中的哪个事件。问题是两个表中的时间是不同的。例如:
df1
fileName Word startTime EndTime
0 file1 additional 149640 150310
1 file1 additional 316430 316900
2 file1 additional 174180 174640
3 file2 additional 161900 162460
4 file2 additional 97150 97600
和df2:
df2
fileName Word startTime EndTime
0 file1 additional 149717 150406
1 file1 additional 316507 316996
2 file1 additional 174257 174736
3 file2 additional 201977 202556
4 file2 additional 97227 97696
您可以看到事件0,1,2和4是相同的事件,但时间略有不同。如果它们的开始和结束时间类似于一些小的容差,我认为它们是相同的。 3事件不符合这种容忍度,因此不应被视为同一事件。
我执行此任务的方法:
我会愉快地研究不同的方法。
答案 0 :(得分:2)
您可以使用get
(虽然它仅适用于主选择轴,例如在列的框架中),因此您需要使用转置来访问。
In [23]: df = DataFrame({'a':[1,2,3],'b':[1,2,3],'c':[1,2,3]})
In [24]: x = df.set_index(['a','b'])
In [25]: x
Out[25]:
c
a b
1 1 1
2 2 2
3 3 3
[3 rows x 1 columns]
In [26]: x.T.get((1,1))
Out[26]:
c 1
Name: (1, 1), dtype: int64
In [27]: x.T.get((1,5),default='foo')
Out[27]: 'foo'
然而,通常迭代和选择值不是使用帧做事的有效方法。你的最终目标是什么?