我在 Python Pandas 中有資料框,如下所示,帶有 str 值:
NR
--------
910517196
921122192
020612567
我嘗試使用以下代碼根據“NR”列中的值計算年齡:
ABT_DATE = pd.Timestamp(year=2021, month=6, day=30)
df['age'] = (ABT_DATE - pd.to_datetime(df.NR.str[:6], format = '%y%m%d')) / np.timedelta64(1, 'Y')
df["age"] = df.age.astype("int")
上面代碼的邏輯是:從“NR”列中的 df 中取第 6 個數字并以此為基礎計算年齡,因為例如:910517196(前 6 個數字)是 1991-05-17。
然而,當我嘗試使用我的代碼時,出現如下錯誤:
ValueError: unconverted data remains: 20
我的 DataFrame 有超過 40 萬行,因此很難檢查所有行,但我確信我沒有 NaN,并且年月日的間隔正確。
正如您在下面的示例中所看到的,此代碼是正確的并且應該有效,為什么它適用于小示例代碼而不適用于我超過 400k 行的資料幀?
df = pd.DataFrame({"NR" : ["95050611475", "00112575862"]})
df['age'] = (ABT_DATE - pd.to_datetime(df.NR.str[:6], format = '%y%m%d')) / np.timedelta64(1, 'Y')
df["age"] = df.age.astype("int")
df
如何修復我的大資料框以便能夠在 Python Pandas 中使用我的代碼?
uj5u.com熱心網友回復:
您可能有一些格式錯誤的行。要找到它們,我建議您使用to_datetimewitherrors='coerce'作為引數。所有未轉換的值都設定為NaN。因此,您可以使用布爾掩碼m來查找錯誤值。
df = pd.DataFrame({"NR" : ["95050611475", "00112575862", "badformat"]})
m = pd.to_datetime(df.NR.str[:6], format='%y%m%d', errors='coerce').isna()
print(df[m])
# Output:
NR
2 badformat
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/321360.html
