当我使用索引访问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]
答案 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')]