Как обновить значения в одном столбце на основе значений в другом столбце? (Получение KeyError: «Ни один из ... не находится в [столбцах]» - PullRequest
0 голосов
/ 02 октября 2019

Я хочу установить значения в одном столбце на ноль (np.nan), если значение в той же строке другого столбца также равно нулю.

Я пытаюсь:

df.loc[df[7].isnull(), df[10]] = np.nan

И я получаю ошибку:

KeyError: "None of [Index(['Density at 15 C (g/mL) (ASTM D5002)', 'Method', 'ASTM D5002)',\n       'ASTM D5002)', 'ASTM D5002)', 'ASTM D5002)', 'ASTM D5002)',\n       'ASTM D5002)', 'ASTM D5002)', 'ASTM D5002)',\n       ...\n       'ASTM D5002)', 'ASTM D5002)', 'ASTM D5002)', 'ASTM D5002)',\n       'ASTM D5002)', 'ASTM D5002)', 'ASTM D5002)', 'ASTM D5002)',\n       'ASTM D5002)', 'ASTM D5002)'],\n      dtype='object', length=297)] are in the [columns]"

Я попытался удалить «пробелы», как я видел это в другом ответе, используя:

delimiter=','

и попытался:

df[7]=df[7].replace(' ','')

И я все еще получаю ту же ошибку.

1 Ответ

2 голосов
/ 02 октября 2019

Использование:

df.loc[df[7].isnull(),10] = np.nan

Пример:

df=pd.DataFrame()
df[1]=[np.nan, 2 ,3 ,4, np.nan]
df[2]=[1,2,3,4,5]
print(df)

     1  2
0  NaN  1
1  2.0  2
2  3.0  3
3  4.0  4
4  NaN  5


df.loc[df[1].isnull(),2]=np.nan
print(df)

     1    2
0  NaN  NaN
1  2.0  2.0
2  3.0  3.0
3  4.0  4.0
4  NaN  NaN

другие случаи:

df=pd.DataFrame()
df[1]=[np.nan, 2 ,3 ,4, '']
df[2]=[1,2,3,4,5]
print(df)

     1  2
0  NaN  1
1    2  2
2    3  3
3    4  4
4       5

df.loc[df[1].isnull(),2]=np.nan
print(df)

     1    2
0  NaN  NaN
1    2  2.0
2    3  3.0
3    4  4.0
4       5.0

каквы видите здесь, вы не можете проверить только с isnull

В этом случае вам нужно:

df.loc[df[1].isnull()|df[1].eq(''),2]=np.nan
print(df)
     1    2
0  NaN  NaN
1    2  2.0
2    3  3.0
3    4  4.0
4       NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...