Вы можете назначить маску, созданную с помощью Series.isin
для обеих сторон отфильтрованного кадра данных, и при необходимости добавить errors='coerce'
для преобразования нечисловых значений в NaN
:
m = data.eName.isin(['sample3','sample4'])
cols = ['Value1', 'Value2']
#if need all columns without eName
#cols = df.columns.difference(['eName'])
data.loc[m, cols] = data.loc[m , cols].apply(pd.to_numeric, errors='coerce')
print (data)
eName Value1 Value2 NValue
0 sample1 XYZ XYZ XYZ
1 sample2 102 XYZ 102 XYZ 102 XYZ
2 sample3 3 3 NaN
3 sample4 3 3 NaN
Если нужны все столбцы без первого:
m = data.eName.isin(['sample3','sample4']).values
data.iloc[m, 1:] = data.iloc[m , 1:].apply(pd.to_numeric, errors='coerce')
Похоже, что некоторые Ваши аксиомы являются неправильными или пропавшие без вести, при попытке копировать схему.
пропавшие без вести:
female(jane).
father(john, bob).
неправильно:
father(john, sue).
Это могло бы вызвать одноуровневое правило конфликтовать. Но что я знаю о прологе
оптимизировать правило брата для Х не является братом самому себе.
Вы должны сделать:
brother(X, Y) :-
sibling(X, Y),
male(X),
not X=Y.
Ваше правило брата уже проверяет это brother(bob, bob)
перестанет работать, потому что это звонит sibling(X, Y)
, который делает проверку для проверки X \= Y
уже.
Кроме того, выглядит, как будто все работает над моей машиной, но я должен был изменить тире на этих строках:
aunt(X, Y) :– female(X), sibling(X, Z), parent(Z, Y).
aunt(X, Y) :– female(X), spouse(X, W), sibling(W, Z), parent(Z, Y).
кому:
aunt(X, Y) :- female(X), sibling(X, Z), parent(Z, Y).
aunt(X, Y) :- female(X), spouse(X, W), sibling(W, Z), parent(Z, Y).
Да, они выглядят идентичными, но тире в главной версии немного длиннее... и, казалось, вызвали проблемы, когда я "консультировался" с файлом.
Я только поймал это, потому что я создал цветовую схему Пролога для Блокнота ++, если кому-либо интересно, я могу разместить его в Интернете.