In [1]:
import pandas as pd
In [2]:
Table = pd.read_csv('C:\Users\Ty Dickinson\Downloads\ClimoFlooding.csv', usecols=[3, 4, 7, 8, 9, 10])
Table['BEGIN_DATE'] = pd.to_datetime(Table.BEGIN_DATE)
Table['Total_Damages'] = Table['DAMAGE_PROPERTY_NUM'] + Table['DAMAGE_CROPS_NUM']
Table['Z_Time'] = Table['BEGIN_TIME']
Table['Z_Day'] = Table['BEGIN_DATE']
pd.options.mode.chained_assignment = None
for i in range(0, len(Table.BEGIN_TIME)):
if Table.BEGIN_TIME[i] <= 1759:
Table.Z_Time[i] = Table.BEGIN_TIME[i] + 600
Table.Z_Day[i] = Table.BEGIN_DATE[i]
else:
Table.Z_Time[i] = (Table.BEGIN_TIME[i] + 600) - 2400
Table.Z_Day[i] = Table.BEGIN_DATE[i] + pd.DateOffset(days=1)
WinterReports = []
SpringReports = []
SummerReports = []
FallReports = []
WinterDeath = []
SpringDeath = []
SummerDeath = []
FallDeath = []
WinterInjury = []
SpringInjury = []
SummerInjury = []
FallInjury = []
WinterCost = []
SpringCost = []
SummerCost = []
FallCost = []
WinterReportDaysList = []
SpringReportDaysList = []
SummerReportDaysList = []
FallReportDaysList = []
#setting the index as date to use the df.loc expression
df = Table.set_index(['BEGIN_DATE'])
#Winter_82 = df.loc['1981-12-01':'1982-02-28']
#defining date ranges and converting them to a Datetime data type
Date1 = pd.to_datetime('12-01-1995')
Date2 = pd.to_datetime('02-28-1996')
Date3 = pd.to_datetime('03-01-1996')
Date4 = pd.to_datetime('05-31-1996')
Date5 = pd.to_datetime('06-01-1996')
Date6 = pd.to_datetime('08-31-1996')
Date7 = pd.to_datetime('09-01-1996')
Date8 = pd.to_datetime('11-30-1996')
WinterCount = 0
SpringCount = 0
SummerCount = 0
FallCount = 0
#while statements to cycle through seasons and calculate reports, deaths, injuries, cost, and report days
while WinterCount <= 14:
x = df.loc[Date1:Date2]
WinterReports.insert(WinterCount,len(x.index))
y = x.DEATHS_DIRECT.sum()
WinterDeath.insert(WinterCount,y)
z = x.INJURIES_DIRECT.sum()
WinterInjury.insert(WinterCount,z)
c = x.Total_Damages.sum()
WinterCost.insert(WinterCount,c)
WinterReportDays = 1
#nested if statements to calculate report days based on 12Z to 12Z the next day as 1 day
if len(x.index) == 0:
WinterReportDaysList.insert(WinterCount, 0)
else:
for i in range(1, len(x.index)):
if ((x.Z_Day[i] == x.Z_Day[i-1]) and ((x.Z_Time[i] < 1200) and (x.Z_Time[i-1] < 1200))):
continue
elif ((x.Z_Day[i] == x.Z_Day[i-1]) and ((x.Z_Time[i] >= 1200) and (x.Z_Time[i-1] >= 1200))):
continue
elif (x.Z_Day[i] == (x.Z_Day[i-1] + pd.DateOffset(days=1))) and ((x.Z_Time[i] < 1200) and (x.Z_Time[i-1] >= 1200)):
continue
else:
WinterReportDays = WinterReportDays + 1
WinterReportDaysList.insert(WinterCount, WinterReportDays)
#if the year was a leap year, then this sets the end date back to Feb. 28
if Date2.is_leap_year:
Date2 = Date2 - pd.DateOffset(days=1)
#adds a year to the end date range for the next cycle of the while statement
Date1 = Date1 + pd.DateOffset(years=1)
Date2 = Date2 + pd.DateOffset(years=1)
#if the upcoming year is a leap year, add 1 day to account for Feb. 29
if Date2.is_leap_year:
Date2 = Date2 + pd.DateOffset(days=1)
WinterCount = WinterCount + 1
while SpringCount <= 14:
x = df.loc[Date3:Date4]
SpringReports.insert(SpringCount,len(x.index))
y = x.DEATHS_DIRECT.sum()
SpringDeath.insert(SpringCount,y)
z = x.INJURIES_DIRECT.sum()
SpringInjury.insert(SpringCount,z)
c = x.Total_Damages.sum()
SpringCost.insert(WinterCount,c)
SpringReportDays = 1
if len(x.index) == 0:
SpringReportDaysList.insert(SpringCount, 0)
else:
for i in range(1, len(x.index)):
if ((x.Z_Day[i] == x.Z_Day[i-1]) and ((x.Z_Time[i] < 1200) and (x.Z_Time[i-1] < 1200))):
continue
elif ((x.Z_Day[i] == x.Z_Day[i-1]) and ((x.Z_Time[i] >= 1200) and (x.Z_Time[i-1] >= 1200))):
continue
elif (x.Z_Day[i] == (x.Z_Day[i-1] + pd.DateOffset(days=1))) and ((x.Z_Time[i] < 1200) and (x.Z_Time[i-1] >= 1200)):
continue
else:
SpringReportDays = SpringReportDays + 1
SpringReportDaysList.insert(SpringCount, SpringReportDays)
Date3 = Date3 + pd.DateOffset(years=1)
Date4 = Date4 + pd.DateOffset(years=1)
SpringCount = SpringCount + 1
while SummerCount <= 14:
x = df.loc[Date5:Date6]
SummerReports.insert(SummerCount,len(x.index))
y = x.DEATHS_DIRECT.sum()
SummerDeath.insert(SummerCount,y)
z = x.INJURIES_DIRECT.sum()
SummerInjury.insert(SummerCount,z)
c = x.Total_Damages.sum()
SummerCost.insert(SummerCount,c)
SummerReportDays = 1
if len(x.index) == 0:
SummerReportDaysList.insert(SummerCount, 0)
else:
for i in range(1, len(x.index)):
if ((x.Z_Day[i] == x.Z_Day[i-1]) and ((x.Z_Time[i] < 1200) and (x.Z_Time[i-1] < 1200))):
continue
elif ((x.Z_Day[i] == x.Z_Day[i-1]) and ((x.Z_Time[i] >= 1200) and (x.Z_Time[i-1] >= 1200))):
continue
elif (x.Z_Day[i] == (x.Z_Day[i-1] + pd.DateOffset(days=1))) and ((x.Z_Time[i] < 1200) and (x.Z_Time[i-1] >= 1200)):
continue
else:
SummerReportDays = SummerReportDays + 1
SummerReportDaysList.insert(SummerCount, SummerReportDays)
Date5 = Date5 + pd.DateOffset(years=1)
Date6 = Date6 + pd.DateOffset(years=1)
SummerCount = SummerCount + 1
while FallCount <= 14:
x = df.loc[Date7:Date8]
FallReports.insert(FallCount,len(x.index))
y = x.DEATHS_DIRECT.sum()
FallDeath.insert(FallCount,y)
z = x.INJURIES_DIRECT.sum()
FallInjury.insert(FallCount,z)
c = x.Total_Damages.sum()
FallCost.insert(FallCount,c)
FallReportDays = 1
if len(x.index) == 0:
FallReportDaysList.insert(FallCount, 0)
else:
for i in range(1, len(x.index)):
if ((x.Z_Day[i] == x.Z_Day[i-1]) and ((x.Z_Time[i] < 1200) and (x.Z_Time[i-1] < 1200))):
continue
elif ((x.Z_Day[i] == x.Z_Day[i-1]) and ((x.Z_Time[i] >= 1200) and (x.Z_Time[i-1] >= 1200))):
continue
elif (x.Z_Day[i] == (x.Z_Day[i-1] + pd.DateOffset(days=1))) and ((x.Z_Time[i] < 1200) and (x.Z_Time[i-1] >= 1200)):
continue
else:
FallReportDays = FallReportDays + 1
FallReportDaysList.insert(FallCount, FallReportDays)
Date7 = Date7 + pd.DateOffset(years=1)
Date8 = Date8 + pd.DateOffset(years=1)
FallCount = FallCount + 1
#Create dataframes for each list
df1 = pd.DataFrame({'Winter Reports': WinterReports})
df2 = pd.DataFrame({'Spring Reports': SpringReports})
df3 = pd.DataFrame({'Summer Reports': SummerReports})
df4 = pd.DataFrame({'Fall Reports': FallReports})
df5 = pd.DataFrame({'Winter Fatalities': WinterDeath})
df6 = pd.DataFrame({'Spring Fatalities': SpringDeath})
df7 = pd.DataFrame({'Summer Fatalities': SummerDeath})
df8 = pd.DataFrame({'Fall Fatalities': FallDeath})
df9 = pd.DataFrame({'Winter Injuries': WinterInjury})
df10 = pd.DataFrame({'Spring Injuries': SpringInjury})
df11 = pd.DataFrame({'Summer Injuries': SummerInjury})
df12 = pd.DataFrame({'Fall Injuries': FallInjury})
df13 = pd.DataFrame({'Winter Damages': WinterCost})
df14 = pd.DataFrame({'Spring Damages': SpringCost})
df15 = pd.DataFrame({'Summer Damages': SummerCost})
df16 = pd.DataFrame({'Fall Damages': FallCost})
df17 = pd.DataFrame({'Winter Report Days': WinterReportDaysList})
df18 = pd.DataFrame({'Spring Report Days': SpringReportDaysList})
df19 = pd.DataFrame({'Summer Report Days': SummerReportDaysList})
df20 = pd.DataFrame({'Fall Report Days': FallReportDaysList})
#concatenate the dataframes together
dftot = pd.concat([
df1, df2, df3, df4, df5, df6, df7, df8, df9, df10,
df11, df12, df13, df14, df15, df16, df17, df18, df19, df20
], axis=1)
years = []
for i in range(1996,2011):
years.insert(i,i)
dftot = dftot.set_index([years])
#export to csv
dftot.to_csv('Flooding Impacts.csv')
In [ ]: