dass Sie eine Funktion
def convert_date(s):
if len(s) == 4:
return s
elif len(s) < 7:
return s[: -4].zfill(2) + '/' + s[-4: ]
else:
return s[: -6].zfill(2) + '/' + s[-6: -4].zfill(2) + '/' + s[-4]
Dann schreiben, wenn Ihre Reisedaten in df.dates
sind, Sie
>>> df.dates.apply(convert_date)
0 31/06/2
1 07/2005
2 01/2005
3 2012
Name: dates, dtype: object
Beachten Sie, dass diese wandelt eine Zeichenkette in einer Form in einer Zeichenkette in einer anderen Form verwenden können, Das heißt, du kannst Daten nicht wirklich weiter manipulieren. Wenn Sie das tun möchten, würde ich vorschlagen, dass Sie die vorhergehende Funktion ändern, um das entsprechende datetime.datetime.strptime
für das Format zu verwenden, das der Länge der Zeichenfolge entspricht. Es könnte wie folgt aussehen:
def convert_date(s):
if len(s) == 4:
return datetime.datetime.strptime('%Y')
elif len(s) < 8:
return datetime.datetime.strptime('%m%Y')
else:
return datetime.datetime.strptime('%d%m%Y')
Beachten Sie, dass Ihr erster Tag (mit den 31 Tagen) illegal scheint, though.
Ist das eine echte Säule, oder ist es ein ein aus? Was Sie fragen, erfordert eine sehr einfache, aber komplizierte Methode. Was hast du bisher gemacht, um deine Frage zu beantworten? – Kartik
Ich versuchte diese Lösung [link] (http://stackoverflow.com/a/32829038/6685708), aber in diesem Fall fehlen Daten und Monate, wo ich ein Problem habe, das richtige Regex formulierend. – Ramprasath
Ja, das ist, weil die Antwort in dem Link alle drei Teile, Datum, Monat und Jahr hat. In Ihrem Fall sind sie nicht konsistent. Aber sie haben alle "", also habe ich vielleicht eine Idee. Ich werde es versuchen und eine Antwort posten ... – Kartik