Pandas Überlauffehler konvertieren Datum zu Monat/Jahr
Posted: 12 Apr 2025, 17:53
Ich mache das folgende Problem auf Leetcode: https://leetcode.com/problems/monthly-transactions-i/
Meine Frage befasst sich nicht viel mit dem tatsächlichen Problem. Format. < /p>
Aber wenn ich schreibe: < /p>
Ich bin hier ziemlich verwirrt, da dies auf meinem eigenen Computer und nicht über Leetcode in Ordnung ausführt. Ich nahm an, dass es aus dem Kontext von Leetcode ersichtlich war, dass Sie die Funktionsdefinition kopieren und einfügen und dann in Leetcode ausführen, aber leider. Hier sind einige minimale Beispiele, die fehlschlagen: < /p>
Meine Frage befasst sich nicht viel mit dem tatsächlichen Problem. Format. < /p>
Aber wenn ich schreibe: < /p>
Code: Select all
import pandas as pd
def monthly_transactions(transactions: pd.DataFrame) -> pd.DataFrame:
transactions['trans_date'] = transactions['trans_date'].dt.to_period('M')
return transactions
< /code>
Ich erhalte einen Laufzeitfehler beim Ausführen auf Leetcode: < /p>
OverflowError: Maximum recursion level reached
return ujson_dumps(
Line 263 in write (/usr/local/lib/python3.10/dist-packages/pandas/io/json/_json.py)
).write()
Line 210 in to_json (/usr/local/lib/python3.10/dist-packages/pandas/io/json/_json.py)
return json.to_json(
Line 2702 in to_json (/usr/local/lib/python3.10/dist-packages/pandas/core/generic.py)
return func(*args, **kwargs)
Line 333 in wrapper (/usr/local/lib/python3.10/dist-packages/pandas/util/_decorators.py)
json_file = simplejson.loads(result_table.to_json(orient='split'))
Line 48 in main (_driver.py)
main()
Line 62 in (_driver.py)
< /code>
Aber das ist in Ordnung (es läuft und gibt die falsche Antwort): < /p>
import pandas as pd
def monthly_transactions(transactions: pd.DataFrame) -> pd.DataFrame:
transactions['trans_date'].dt.to_period('M')
return transactions
Code: Select all
import pandas as pd
data = [[121, 'US', 'approved', 1000, '2018-12-18'], [122, 'US', 'declined', 2000, '2018-12-19'], [123, 'US', 'approved', 2000, '2019-01-01'], [124, 'DE', 'approved', 2000, '2019-01-07']]
transactions = pd.DataFrame(data, columns=['id', 'country', 'state', 'amount', 'trans_date']).astype({'id':'Int64', 'country':'object', 'state':'object', 'amount':'Int64', 'trans_date':'datetime64[ns]'})
def monthly_transactions(transactions: pd.DataFrame) -> pd.DataFrame:
transactions['trans_date'] = transactions['trans_date'].dt.to_period('M')
return transactions
print(monthly_transactions(transactions))
< /code>
mit Fehler: < /p>
OverflowError: Maximum recursion level reached
return ujson_dumps(
Line 263 in write (/usr/local/lib/python3.10/dist-packages/pandas/io/json/_json.py)
).write()
Line 210 in to_json (/usr/local/lib/python3.10/dist-packages/pandas/io/json/_json.py)
return json.to_json(
Line 2702 in to_json (/usr/local/lib/python3.10/dist-packages/pandas/core/generic.py)
return func(*args, **kwargs)
Line 333 in wrapper (/usr/local/lib/python3.10/dist-packages/pandas/util/_decorators.py)
json_file = simplejson.loads(result_table.to_json(orient='split'))
Line 48 in main (_driver.py)
main()
Line 62 in (_driver.py)
< /code>
Ich möchte das gleiche Ergebnis wie auf meinem Computer ausführen: < /p>
id country state amount trans_date
0 121 US approved 1000 2018-12
1 122 US declined 2000 2018-12
2 123 US approved 2000 2019-01
3 124 DE approved 2000 2019-01
< /code>
Jemand hat erwähnt, dass es möglicherweise ein [url=viewtopic.php?t=20324]Problem[/url] beim Überschreiben derselben Spalte gibt, aber eine neue Spalte zu erstellen, schlägt auch mit dem gleichen Fehler wie oben fehl: < /p>
import pandas as pd
data = [[121, 'US', 'approved', 1000, '2018-12-18'], [122, 'US', 'declined', 2000, '2018-12-19'], [123, 'US', 'approved', 2000, '2019-01-01'], [124, 'DE', 'approved', 2000, '2019-01-07']]
transactions = pd.DataFrame(data, columns=['id', 'country', 'state', 'amount', 'trans_date']).astype({'id':'Int64', 'country':'object', 'state':'object', 'amount':'Int64', 'trans_date':'datetime64[ns]'})
def monthly_transactions(transactions: pd.DataFrame) -> pd.DataFrame:
transactions['trans_date_1'] = transactions['trans_date'].dt.to_period('M')
return transactions
print(monthly_transactions(transactions))
< /code>
Ich möchte (vom Ausführen auf meinem Computer): < /p>
id country state amount trans_date trans_date_1
0 121 US approved 1000 2018-12-18 2018-12
1 122 US declined 2000 2018-12-19 2018-12
2 123 US approved 2000 2019-01-01 2019-01
3 124 DE approved 2000 2019-01-07 2019-01