Reputation: 145
I have a dataframe which I need to it. I am doing in the following way:
for index, row in df.iterrows():
if len(row['dateHourMinute'])==14:
row['dateHourMinute'] = pd.to_datetime(row['dateHourMinute'])
elif len(row['dateHourMinute'])==21:
row['dateHourMinute'] = row['dateHourMinute'][:-9]
row['dateHourMinute'] = row['dateHourMinute']+'00'
row['dateHourMinute'] = pd.to_datetime(row['dateHourMinute'])
elif len(row['dateHourMinute'])==19:
row['dateHourMinute'] = row['dateHourMinute'][:-9]
row['dateHourMinute'] = row['dateHourMinute'] + '0000'
row['dateHourMinute'] = pd.to_datetime(row['dateHourMinute'])
However, the dataframe (df) is not being updated in the end.
Any solutions on that? I have seen lambda, but it is not quite useful in my case.
Any helps would be really appreciated.
Upvotes: 0
Views: 38
Reputation: 145
Solved it like this:
for i, row in traffic_source_df.iterrows():
new_value = pd.Series([])
if len(row['dateHourMinute']) == 14:
new_value = pd.to_datetime(row['dateHourMinute'])
elif len(row['dateHourMinute']) == 12:
row['dateHourMinute'] = row['dateHourMinute'] + '00'
new_value = pd.to_datetime(row['dateHourMinute'])
elif len(row['dateHourMinute']) == 10:
row['dateHourMinute'] = row['dateHourMinute'] + '0000'
new_value = pd.to_datetime(row['dateHourMinute'])
traffic_source_df.at[i, 'dateHourMinute'] = new_value
Upvotes: 0
Reputation: 154
You may try using .apply(func)
:
def fixCol(row):
if len(row['dateHourMinute']) == 14:
row['dateHourMinute'] = pd.to_datetime(row['dateHourMinute'])
elif len(row['dateHourMinute']) == 21:
row['dateHourMinute'] = row['dateHourMinute'][:-9]
row['dateHourMinute'] = row['dateHourMinute'] + '00'
row['dateHourMinute'] = pd.to_datetime(row['dateHourMinute'])
elif len(row['dateHourMinute']) == 19:
row['dateHourMinute'] = row['dateHourMinute'][:-9]
row['dateHourMinute'] = row['dateHourMinute'] + '0000'
row['dateHourMinute'] = pd.to_datetime(row['dateHourMinute'])
df['dateHourMinute'] = df['dateHourMinute'].apply(fixCol)
Upvotes: 1