我想从我的数据框中删除包含float dtype列的字符串值的行。例如,如果我有一个金额字段,我想删除数据框中包含金额字段中值“NA”的所有行。
到目前为止,我已经尝试了以下内容 -
to_drop = ['NA']
data = data[~data['gross'].isin(to_drop)]
和
data = data[data.gross.str != 'NA']
我得到“只使用带有字符串值的.str访问器,它在pandas中使用np.object_ dtype”。
这样做的正确方法是什么?
答案 0 :(得分:2)
如果NA
缺少值NaN
)需要notnull
或dropna
并指定了NaN
s的列:
data = pd.DataFrame({'gross':[np.nan,3,5],
'a':[2,3,4]})
print (data)
a gross
0 2 NaN
1 3 3.0
2 4 5.0
data1 = data[data.gross.notnull()]
print (data1)
a gross
1 3 3.0
2 4 5.0
data1 = data.dropna(subset=['gross'])
print (data1)
a gross
1 3 3.0
2 4 5.0
或者,如果混合值 - 带字符串的数字首先将所有值强制转换为str
或者比较values
创建的numpy数组:
data = pd.DataFrame({'gross':['NA',3,5,'NA'],
'a':[2,3,4,8]})
print (data)
a gross
0 2 NA
1 3 3
2 4 5
3 8 NA
data2 = data[data.gross.astype(str) != 'NA']
print (data2)
a gross
1 3 3
2 4 5
data2 = data[data.gross.values != 'NA']
print (data2)
a gross
1 3 3
2 4 5
答案 1 :(得分:0)
IIUC:
data['gross'] = data.gross.replace('NA',np.nan)
data = data.dropna()
或
data[~data.gross.replace('NA',np.nan).isnull()]
用NaN替换字符串'NA',然后使用dropna axis = 1删除这些行。