Pandas ix方法返回空白数据帧而不是所需结果

时间:2018-01-18 01:54:49

标签: python pandas dataframe

所以我正在尝试使用“删除不符合所需条件的行”下的方法,仅在我的数据框中包含行B的值小于列C的行:https://www.quora.com/How-should-I-delete-rows-from-a-DataFrame-in-Python-Pandas

它不起作用,只返回一个空白数据框

所以基本上它应该是这样的:

import pandas as pd
import numpy as np

import1 = pd.read_csv('./a_csv.csv')
import2 = pd.read_csv('./another_csv.csv')

df1 = import1[['A', 'B']]
df2 = import2[['A1', 'C']]

In[10]: df = pd.merge(df1, df2, left_on='A', right_on='A1').drop('A1', axis=1)
Out[10]:
    A    B    C
a  01    2    2
b  02    5    6
c  03    8    8
d  04    1    5

In[11]: df = df.ix[~(df['B'] < df['C'])]
Out[11]:
    A    B    C
a  02    5    6
b  04    1    5

但是第11行没有产生预期的结果。我究竟做错了什么?如果它们更容易或更有效,我会愿意使用ix以外的方法。

1 个答案:

答案 0 :(得分:2)

两个问题

  1. 使用~来否定面具。
  2. .ix用于按名称和位置编制索引。通常,您希望使用.loc.iloc,除非您有充分的理由不这样做。 .ix实际上是deprecated,因为它很容易导致真正意想不到的结果。
  3. 而不是你的第11行尝试:

    df.loc[df['B'] < df['C']]
    

    返回:

       A  B  C
    b  2  5  6
    d  4  1  5