Nazrin Guliyeva
Nazrin Guliyeva

Reputation: 145

Update dataframe while iterating rows

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

Answers (2)

Nazrin Guliyeva
Nazrin Guliyeva

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

pzmn
pzmn

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

Related Questions