来自Python pandas的UserWarning关于重新索引的布尔系列键

时间:2016-04-07 02:14:32

标签: python pandas

当我使用索引访问pandas.DataFrame时,它给了用户警告并且他们没有干扰它的输出。我希望知道这个用户警告是如何发生的,我该怎么做才能避免这些用户警告?感谢大家的关注。

df = pandas.DataFrame([[k, ass4Dict[k], k[:2], k[-2:]] for k in ass4Dict])
df.columns = ['string', 'count', 'lstr', 'rstr']
df = df[df['count'] >= 10]
**df = df[df['lstr'].map(lambda x:x in gram2Dict)][df['rstr'].map(lambda x:x in gram2Dict)]**
df['lstrCNT'] = df['lstr'].map(lambda x: float(gram2Dict[x]))
df['rstrCNT'] = df['rstr'].map(lambda x: float(gram2Dict[x]))
df['conPow'] = df['lstrCNT'] * df['rstrCNT']
df['lstrPow'] = df['count'] / df['lstrCNT']
df['rstrPow'] = df['count'] / df['rstrCNT']
df['aux4Ratio'] = df['count'] / df['conPow']
df['aux4Log'] = df['aux4Ratio'].map(lambda x: -log(x))
**df = df[df['aux4Log'] < 11][df['lstrPow'] >= 0.5][df['rstrPow'] >= 0.5]**

...

沉钦言359

纪小蕊158

顾持钧949

林晋修642

4

0.256721019745 1.22976207733

ch_extract.py:153:UserWarning:Boolean系列键将重新编制索引以匹配DataFrame索引。   df = df [df ['lstr']。map(lambda x:x in gram2Dict)] [df ['rstr']。map(lambda x:x in gram2Dict)] ch_extract.py:161:UserWarning:Boolean系列键将重新编制索引以匹配DataFrame索引。   df = df [df ['aux4Log']&lt; 11] [df ['lstrPow']&gt; = 0.5] [df ['rstrPow']&gt; = 0.5]

1 个答案:

答案 0 :(得分:1)

如果我们只取最后一行并重新创建它,如下例所示:

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.randint(0,50,size=(50, 4)), columns=list('ABCD'))
df[df.A < 11][df.B >= 25][df.C >= 25]

最后一行将一系列切片串联起来。在第一个切片之后,需要重新索引每个后续切片,因为结果数据框不包含上一切片中的所有项目。

在这种情况下,正确的形式是将布尔切片组合成一个表达式:

df[(df.A < 11) & (df.B >= 25) & (df.C >= 25)]

可能导致此警告的其他一些案例如下:

df[df.sort_values(['A'], ascending=[False]).duplicated(subset='B', keep='first')]

在这种情况下,请使用loc命令:

df.loc[df.sort_values(['A'], ascending=[False]).duplicated(subset='B', keep='first')]