Python 如果少数行满足某些条件,如何使用pandas删除行
我有一个CSV文件,看起来像:Python 如果少数行满足某些条件,如何使用pandas删除行,python,pandas,csv,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 如果这些行在第3列、第4列、第5列、第6列和第7列中有-,我想使用熊猫
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
如果这些行在第3列、第4列、第5列、第6列和第7列中有-
,我想使用熊猫删除这些行
删除不必要的信息后,文件将如下所示
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
我不知道怎么做。谢谢你的帮助。试试:
filtered = data[(data.column3 != "-") & (data.column4 != "-") & (data.column5 != "-") & (data.column6 != "-") & (data.column7 != "-")]
如果单元格可能只包含“-”,请重试
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
一种简单的方法是将
-
转换为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