разделить данные во вложенном json для выполнения некоторых расчетов
надеюсь, что кто-то мне поможет. У меня есть вложенный файл json, и я пытаюсь вычислить разницу в возрасте между двумя строками файла, start_date и end_date с форматом даты только мм / гггг. Итак, я пытаюсь разделить его, чтобы я мог рассчитать разницу в году между end_date и start_date, если более 10 лет, я добавляю в другой список.
Это мой код ниже, но он выводит пустой список, и я не знаю, как его исправить. Любые советы или направления будут оценены
О ... Мне нужно использовать библиотеки Python по умолчанию, поэтому, хотя с пандами будет проще, я не могу их использовать.
remove_card=[]
def datebreakdown(data_file):
expr1 = data_file['Credit Card']['start_date']
expr2 = data_file['Credit Card']['end_date']
breakdown1 = expr1.split('/')
breakdown2 = expr2.split('/')
card_month = int(breakdown1[0]) - int(breakdown2[0])
card_year= int(breakdown1[1]) - int(breakdown2[1])
if card_year >= 10:
return True
elif card_year == 10 and card_year > 0:
return True
else:
return False
for line in data_json: #data_json is name of the json file.
if datebreakdown(data_file) == True:
remove_card.append(data_file)
1 ответ
Я думаю, что это условия, которые вы хотите:
if card_year > 10:
return True
elif card_year == 10 and card_month > 0:
return True
else:
return False
Первое условие должно быть строго
>
, нет
>=
. Второе условие должно сравнивать месяцы, когда разница в годах ровно 10.
Другая проблема заключается в том, что вы вычитаете даты в неправильном порядке. Вы вычитаете конец из начала, поэтому он всегда будет отрицательным. Таким образом, эти вычитания должны быть:
card_month = int(breakdown2[1]) - int(breakdown1[0])
card_year= int(breakdown2[1]) - int(breakdown1[1])
def datebreakdown(data_file):
expr1 = data_file['Credit Card']['start_date']
expr2 = data_file['Credit Card']['end_date']
year1, month1 = expr1.split('/')
year2, month2 = expr2.split('/')
start_date = int(year1) + int(month1)/12
end_date = int(year2) + int(month2)/12
return end_date - start_date > 10