#python #pandas
#python #pandas
Вопрос:
У меня очень большой фрейм данных со многими столбцами (почти 300). Я хотел бы удалить все строки, в которых значения всех столбцов, кроме столбца с именем ‘Country’, равны NaN.
dropna может удалять строки, в которых все или некоторые значения равны NaN. Но каков эффективный способ сделать это, если есть столбец, который вы хотите исключить из процесса?
Ответ №1:
Попробуй:
mask = df.drop("Country",axis=1).isna().all(1) amp; df['Country'].notna()
out = df[~mask]
Ответ №2:
Вы можете использовать filter
для исключения столбца Country
:
df = pd.DataFrame({"A":[nan, 2, 3,], "Countryside":[nan, 4, 6], "Country":list("ABC")})
A Countryside Country
0 NaN NaN A
1 2.0 4.0 B
2 3.0 6.0 C
print (df[~df.filter(regex=r"^(?!Countryb)").isnull().all(1)])
A Countryside Country
1 2.0 4.0 B
2 3.0 6.0 C
Ответ №3:
Это должно сработать:
def remove_if_eq(v,dataframe,keys):
for i in df.index:
delete = True
for j in df.columns:
if df[j][i] != v:
delete = False
break
if delete:dataframe = dataframe.drop(i)
return(dataframe)
v — значение
dataframe — это dataframe
ключи — это имена столбцов, которые вы хотите найти