недопустимый литерал для int() с основанием 10: «Низкая сумма»

#python #pandas #numpy

Вопрос:

Я пытаюсь использовать np.where , как показано ниже

inds_2 = np.where(df2['Transaction Amount']>5000 , 'High Amount' ,'Low Amount')

 > df2['Transaction Amount']
13      414
15      630
16      444
17      444
18      779
       ... 
1403     12
1404     12
1405     12
1406     12
1408    415
 

Когда я использую iloc , я получаю эту ошибку:

 > df2.iloc[inds_2]
invalid literal for int() with base 10: 'Low Amount'
 

Я попробовал функцию ниже, но она тоже не работала:

 > df2['Transaction Amount'] = df2['Transaction Amount'].astype(float).astype(int)
 

Могу я получить какую-нибудь помощь?

Комментарии:

1. Читайте об этом . iloc в документации. Он основан на целочисленном расположении, а не на строке.

Ответ №1:

Вы, вероятно, захотите отфильтровать транзакции на df2 основе высоких и низких транзакций. Вы можете сделать что-то вроде этого:

 is_high = np.where(df2['Transaction Amount']>5000 , True, False)

print("High transactions:", df2.loc[is_high])
print("Low transactions:", df2.loc[~is_high])
 

Но не забывайте, что это просто эквивалентно:

 df2.loc[df2['Transaction Amount']>5000]
 

Проблема в .iloc том, что он предназначен для индексации на основе целочисленного местоположения. Посмотри на это.

Правка 1:

 df2['Transaction Amount'].apply(lambda value: 'High amount' if value > 5000 else 'Low amount')
 

Комментарии:

1. возможно, это частично решило проблему, но что, если я хочу, чтобы значения отображались как «низкое количество», «большое количество» по np.where и отображали все данные одновременно по iloc

2. Вы пытаетесь просто написать высокую и низкую сумму вместо суммы транзакции, а не цифры?

3. да, что делать, если я хочу написать высокую и низкую сумму вместо суммы транзакции

4. См. правку-1 в моем ответе. Я думаю, что это то, чего вы хотите, если вы не настаиваете на использовании numpy.