#python #pandas
#питон #панды
Вопрос:
У меня есть следующий фрейм данных:
import pandas as pd
df = pd.DataFrame(index=[0, 1, 2], columns=["test1", "test2"])
df.at[1, "test1"] = 3
df.at[2, "test2"] = 5
print(df)
test1 test2
0 NaN NaN
1 3 NaN
2 NaN 5
Я попробовал следующую строку, чтобы установить все значения NaN в индексах 1 и 2 на False
:
df.loc[[1, 2] amp; pd.isna(df)] = False
Однако это выдает мне ошибку.
Мой ожидаемый результат будет следующим:
test1 test2
0 NaN NaN
1 3 False
2 False 5
Комментарии:
1. Вы хотите использовать
df.loc[[1,2]].fillna(False)
Ответ №1:
Ты можешь это сделать:
In [917]: df.loc[1:2] = df.loc[1:2].fillna(False)
In [918]: df
Out[918]:
test1 test2
0 NaN NaN
1 3 False
2 False 5
Комментарии:
1. Спасибо, именно то, что я искал!
Ответ №2:
pd.isna(df)
это маска формы вашего фрейма данных, и вы не можете использовать ее как фрагмент в .loc
вызове. В этом случае вы хотите выборочно обновлять нулевые значения вашего фрейма данных в определенных строках, чтобы мы могли использовать .fillna
with update
для возврата изменений.
df.update(df.loc[[1, 2]].fillna(False))
print(df)
test1 test2
0 NaN NaN
1 3 False
2 False 5
Комментарии:
1. Интересный способ обновления, а также, спасибо за предложение
Ответ №3:
Давайте попробуем с fillna
и пройдем dict
df = df.T.fillna(dict.fromkeys(df.index[1:],False),axis=0).T
test1 test2
0 NaN NaN
1 3 False
2 False 5