如果列包含Pandas中的任何字符串值,则从数据框中删除值

时间:2017-08-13 19:27:16

标签: python pandas dataframe

我想从我的数据框中删除包含float dtype列的字符串值的行。例如,如果我有一个金额字段,我想删除数据框中包含金额字段中值“NA”的所有行。

到目前为止,我已经尝试了以下内容 -

to_drop = ['NA']
data = data[~data['gross'].isin(to_drop)]

data = data[data.gross.str != 'NA']

我得到“只使用带有字符串值的.str访问器,它在pandas中使用np.object_ dtype”。

这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

如果NA缺少值NaN)需要notnulldropna并指定了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删除这些行。