我是编程和Python3 / Pandas的新手。
我已经将一个csv文件写入了dF并使用了pandas和numpty。 dF包含一系列列,A,B,C等,以及数千行数据(不是全部数字)。我想从数据框中删除所有“未知”的实例。
我试过了:
dF = dF [dF ['A'!='未知']]
但它给了我一条错误信息。
答案 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"')