我正在使用大約 1000 個樣本的資料框。在特定列中,大約有 800 個具有有效資料的樣本和 200 個具有不規則分布在總體中的缺失值。
我已經提取了具有缺失值的樣本,并填充了來自不同資料集的有效資料作為 csv。
我正在嘗試使用更正后的值更新原始資料框,但我發現它比我認為的更困難,但我已經盯著它看的時間夠長了,我想我再也看不到樹林里的樹木了。
用代碼來說明問題:
import pandas as pd
import numpy as np
df_master = pd.DataFrame({'id':[1, 2, 3, 4, 5, 6],
'player_id':[53, 26, 74, 15, 63, 82],
'age':[25, np.NaN, 37, 13,53, np.NaN])
ageless = df_master[df_master.age.isna()]
ageless.to_csv('fill_ages.csv')
填滿年齡后:
filled_ages = pd.read_csv('filled_ages.csv')
我試過使用合并:
pd.merge(df_master, filled_ages, on=df_master['player_id'], how='left')
但我收到“檢查重復項”錯誤。我也試過迭代資料幀:
for i in df_master.player_id:
if i in filled_ages.player_id:
df_master.age[df_master.player_id == i] = filled_ages.age[filled_ages.player_id == i]
但會收到“切片復制”警告。任何想法我做錯了什么?
uj5u.com熱心網友回復:
您可以像這樣使用 pd.Series.map:
df_master['age'] = df_master['id'].map(filled_ages.set_index('id')['age'])\
.fillna(df_master['age'])
uj5u.com熱心網友回復:
確保在閱讀檔案時閱讀檔案的索引:
filled_ages = pd.read_csv('filled_ages.csv', index_col=0)
然后您可以使用現有索引填寫 NaN(假設您沒有更改它們):
df_master= df_master.fillna(filled_ages)
它將使用filled_ages具有相同索引的資料幀中的值更新 NaN?? 值。只要您保留索引,這就會起作用。
如果您沒有保留索引,并假設它player_id是唯一的,則可以將其用作索引:
master_df = master_df.set_index('player_id')
filled_ages = filled_ages.set_index('player_id')
master_df["age"] = master_df["age"].fillna(filled_ages["age"])
master_df = master_df.reset_index()
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/358218.html
下一篇:將識別符號添加到資料幀索引
