我想删除所有行,结果某个列的结果“未知”

时间:2017-05-26 23:09:15

标签: python pandas filtering rows

我是编程和Python3 / Pandas的新手。

我已经将一个csv文件写入了dF并使用了pandas和numpty。 dF包含一系列列,A,B,C等,以及数千行数据(不是全部数字)。我想从数据框中删除所有“未知”的实例。

我试过了:

dF = dF [dF ['A'!='未知']]

但它给了我一条错误信息。

2 个答案:

答案 0 :(得分:2)

您需要按boolean indexing过滤数据:

df = pd.DataFrame({'A':['a','unknown','b'],
                   'B':pd.date_range('2017-01-01', periods=3),
                   'C':[7,8,9],
                   'D':[1,3,5]})
print (df)
         A          B  C  D
0        a 2017-01-01  7  1
1  unknown 2017-01-02  8  3
2        b 2017-01-03  9  5

由于运算符优先级,您需要在大括号中包含多个条件,如果有多个条件,则使用按位和(&)和或(|)运算符:

df1 = df[(df['A'] != 'unknown') & (df['B'] > '2017-01-02')]
print (df1)
   A          B  C  D
2  b 2017-01-03  9  5

但如果需要稍后处理数据:

df1['C'] = df1['C'] + 1
print (df1)
  

正在尝试在DataFrame的切片副本上设置值。   尝试使用.loc [row_indexer,col_indexer] = value而不是

问题是如果您稍后修改df1中的值,您会发现修改不会传播回原始数据(df)并且Pandas会发出警告。

解决方案是copy

df1 = df[(df['A'] != 'unknown') & (df['B'] > '2017-01-02')].copy()
print (df1)
   A          B  C  D
2  b 2017-01-03  9  5

df1['C'] = df1['C'] + 1
print (df1)
   A          B  C  D
2  b 2017-01-03 10  5

答案 1 :(得分:1)

你的意思是?

df = df[df['A'] != 'unknown']

或者您可以使用query()

df = df.query('A != "unknown"')