Я использую Panda read_csv. Последний столбец в большинстве строк содержит отсутствующие данные, как показано в примере ниже. Но в нескольких строках данные есть. Вместо того, чтобы рассматривать это как ноль, это, кажется, рассматривает это как NAN. Я пытался создать оператор if, чтобы показать только строки, в которых есть данные в этом столбце.
(образец выписки из American Express в CSV):
01/01/2018 понедельник, "GOOGLE * SVCSAPPS_NEALW - CC@GOOGLE.COM, CA", Нил Уолтерс, XXXX-XXXXXX-XXXXX ,,, 4.16 ,,, GOOGLE SERVICES, "1600 AMPHITHEATER PKWYMOUNTAIN VIEWCA", "94043-1351UNITED STATES", '320180020394601453',
colnames=['DateTime', 'NotUsed2', 'PayeeLong', 'NotUsed4', 'NotUsed5', 'NotUsed6', 'NotUsed7', 'Amount', 'NotUsed9',
'NotUsed10', 'Payee', 'PayeeAddress', 'PayeeCountry', 'NotUsedX', 'AmexCategory']
data = pd.read_csv(filenameAmexGold, names=colnames, header=None)
# Preview the first 5 lines of the loaded data
print (data.head())
for j in range(len(data)):
#if not(math.isnan(data['AmexCategory'][j])):
# if data['AmexCategory'][j] > ' ':
print("Row ", j, data['DateTime'][j], data['Payee'][j], data['Amount'][j],
"AmexCat=", data['AmexCategory'][j],
"PayeeLong=", data['PayeeLong'][j] )
Пример выходных данныхdata.head ...
DateTime NotUsed2 ... NotUsedX AmexCategory
0 01/01/2018 Mon NaN ... '320180021453' NaN
1 01/02/2018 Tue NaN ... '320180035375' NaN
2 01/04/2018 Thu NaN ... '320180043184' NaN
3 01/08/2018 Mon NaN ... '320180080899' 'Software'
4 01/13/2018 Sat NaN ... '320180133142' NaN
Когда я включаю два закомментированных оператора if, я получаю эту ошибку:
TypeError: должно быть действительным числом, а не str
PART2
Аналогично, в строке 19 отсутствует PAYEE, поскольку это платеж, а не сбор.
01/26/2018, пятница, 20, АВТОПЕЙНАЯ ПЛАТЕЖА - СПАСИБО, Нил Уолтерс, XXXX-XXXXXX-XXXXX ,,, - 347.52 ,,,,,, '320180260752306017',
Я знаю, что эта строка отображается как NaN в data.head (20), поэтому я хочу знать, как проверить ее на ноль или NaN. Когда я перечисляю dtypes, это показывает, что Payee - объект (не плавание). Для меня это просто строковое поле, но я думаю, что это объект.
#This test works
print("Test2", dfAmexGold['Payee'][19])
if (math.isnan( dfAmexGold['Payee'][19])):
print("found a NAN value")
print("Test1", dfAmexGold['Payee'][20])
if (math.isnan( dfAmexGold['Payee'][20])):
print("found a NAN value")
Тест для строки 20 взрывается следующим образом:
TypeError: должно быть действительным числом, а не str
Вопрос в том, какделать, если тесты на отдельные элементы, и почему это не согласуется с использованием Null для пустых ячеек вместо NaN.
Я также пытался, но это не показывает строку как NULL (но также не взрывается). если dfAmexGold ['Payee'] [19] равен None: print ("найдено значение NULL")