0

I am try to use apply function on pandas series which works fine when the function is not nested.

def valid_date(datestring):
    try: return datetime.datetime.strptime(datestring, '%m-%d-%y').date() # 02-22-99
    except ValueError:
        try: return datetime.datetime.strptime(datestring, '%m/%d/%Y').date() #02/22/1999
        except ValueError:
            pass
        return False
bs.apply(valid_date)

The output of the above gives what I want

0      1993-03-25
1      1985-06-18
2      1971-07-08
3      1975-09-27
4      1996-02-06
5      1979-07-06
6      1978-05-18
7      1989-10-24
Length: 8, dtype: object

bs is series

0        03/25/93
1         6/18/85
2          7/8/71
3         9/27/75
4          2-6-96
5         7-06-79
6         5/18/78
7        10/24/89
Length: 8, dtype: object

But when nested in a function it returns

TypeError: strptime() argument 1 must be str, not float

Nested function is

def dateApply():
    def valid_date(datestring):
        try: return datetime.datetime.strptime(datestring, '%m-%d-%y').date() # 02-22-99
        except ValueError:
            try: return datetime.datetime.strptime(datestring, '%m/%d/%Y').date() #02/22/1999
            except ValueError:
               pass
            return False
    bd=bs.apply(valid_date)
return bd.sort_values()

Note: It is necessary for me to nest the function. Also, since I have variety of date formats I cannot use pd.to_datetime() and have to revert to nested try-except block

Aman Bagrecha
  • 406
  • 4
  • 9

0 Answers0