Versuchen ^([0-9])$
für das Muster und 0\1
für den Ersatz:
>>> df = p.DataFrame(data={'date': ['1', '2', '12', '31']})
>>> df['date'].replace('^([0-9])$', r'0\1', regex=True)
0 01
1 02
2 12
3 31
Name: date, dtype: object
die Kommentare lesen, die Sie auf andere Fragen geschrieben, es scheint, wie Sie Datumsformatierung tun. Ich glaube, es ist besser, dafür datetime
zu verwenden. Hier ein Beispiel:
>>> from datetime import datetime
>>> df = p.DataFrame(data={'date': ['1', '2', '12', '31'], 'month': ['1', '2', '5', '12'], 'year': ['07', '10', '16', '17']})
>>> dates = df.apply(lambda row: datetime(year=2000+int(row['year']), month=int(row['month']), day=int(row['date'])), axis=1)
>>> dates
0 2007-01-01
1 2010-02-02
2 2016-05-12
3 2017-12-31
dtype: datetime64[ns]
>>> dates.apply(lambda row: row.strftime('%x'))
0 01/01/07
1 02/02/10
2 05/12/16
3 12/31/17
dtype: object
>>> dates.apply(lambda row: row.strftime('%Y-%m-%d'))
0 2007-01-01
1 2010-02-02
2 2016-05-12
3 2017-12-31
dtype: object
Auf diese Weise erhalten Sie eine bessere Kontrolle über das Datumsformat.
bearbeiten
Wenn Sie noch mehr Kontrolle über die Konvertierung benötigen, eine Funktion stattdessen machen:
>>> def convert_dates(row):
... year = row['year']
... month = row['month']
... day = row['date']
... if '' in [year, month, day]:
... return None # Don't bother with empty values
... year, month, day = [int(x) for x in [year, month, day]]
... if year < 100:
... year += 2000
... return datetime(year, month, day)
...
>>> df = p.DataFrame(data={'date': ['11', '2', '1', '31'], 'month': ['08', '2', '5', '12'], 'year': ['1985', '10', '16', '']})
>>> df.apply(convert_dates, axis=1)
0 1985-08-11
1 2010-02-02
2 2016-05-01
3 NaT
dtype: datetime64[ns]
Danke, ich wusste nicht, dass das möglich ist ... diese Lösung ist in Ordnung. Aber was ist, wenn ich das gleiche Problem seit Jahren habe? Betrachten Sie zum Beispiel eine Spalte Jahre mit 23, 12, 15 usw. Dann muss ich 20 auf der linken Seite der Ziffer imputieren ... Wie kann ich das tun ?. – tumbleweed
Wenn schon ein str, dann kannst du einfach '' 20 '+ df [' year ']' oder '' 20 '+ df [' year ']. Astype (str) ' – EdChum
Kannst du das Beispiel liefern? ... Danke für die Hilfe! – tumbleweed