如果几行使用pandas满足某些条件,如何删除行

时间:2018-02-18 17:48:51

标签: python pandas csv

我的CSV文件如下:

dates, names, column3, column4, column5, column6, column7 
1-3-2017,Bob,somedata,somedata,somedata,somedata,somedata
1-1-2018,Bob,-,-,-,-,-
1-1-2017,Bob,somedata,somedata,somedata,somedata,somedata

如果使用pandas在column3,column4,column5,column6和column7中这些行包含-,我想删除行。

删除不必要的信息后,文件将如下所示

dates, names, column3, column4, column5, column6, column7 
1-1-2017,Bob,somedata,somedata,somedata,somedata,somedata
1-3-2017,Bob,somedata,somedata,somedata,somedata,somedata

无法理解如何做到这一点。谢谢你的帮助。

3 个答案:

答案 0 :(得分:0)

尝试:

filtered = data[(data.column3 != "-") & (data.column4 != "-") & (data.column5 != "-") & (data.column6 != "-") & (data.column7 != "-")]

答案 1 :(得分:0)

如果单元格可能只包含' - ',请尝试

new_df = df[~(df.iloc[:, 2:] == '-').any(1)]

如果它们可能包含“ - ”以及其他一些字符,

new_df = df[~df.iloc[:, 2:].apply(lambda x: x.str.contains('-').any(), axis = 1)]

无论哪种方式,

    dates.      names   column3     column4     column5     column6     column7
0   1-3-2017    Bob     somedata    somedata    somedata    somedata    somedata
2   1-1-2017    Bob     somedata    somedata    somedata    somedata    somedata

答案 2 :(得分:0)

一种直接的方法是将-转换为np.nan,然后使用df.dropna

import numpy as np

df = df.replace('-', np.nan).dropna(subset=['column'+str(i) for i in range(3, 8)])

#       dates names   column3   column4   column5   column6   column7
# 0  1-3-2017   Bob  somedata  somedata  somedata  somedata  somedata
# 2  1-1-2017   Bob  somedata  somedata  somedata  somedata  somedata