我有一個相當大的資料框架,其中的一小部分顯示如下。
import numpy as np
import pandas as pd
df = pd.DataFrame({'A': [-1, 15, 0] 。
'B': [np.nan, 50, 4] 。
'C': [30, 5, 30, ] 。
'D': [15, 2, np.nan] 。
'E': [8, 5, 99] 。
'F': [45, 7, np.nan] 。
'G'/span>: [1, 0, 35]})
除了NaN之外,實際上還有其他缺失的代碼,正如所附的特征資料框架中所指出的。
feature_info= pd.DataFrame({
'feature': ['A'/span>, 'B'/span>, 'C'/span>, 'D'/span>, 'E'/span>, 'F'/span>, 'G'/span>] 。
'missing_info': ['[-1, 0]', '[]', '[]', '[] ' , '[99]', '[]', '[1,0] ']})
注意到每個特征的缺失值串列周圍的引號。
我如何對缺失的代碼進行查找,以替換df中各列中的值?
uj5u.com熱心網友回復:
從問題的描述來看,你似乎想用NaN值來替換缺少的代碼。以下是我如何處理這個問題的方法
literal_eval將missing_info列中的字串作為python串列進行評估feature并選擇feature_info列來創建一個系列d。
df中的每一列,掩蓋在系列d中相應的索引名稱也出現的值import ast
d = feature_info.set_index('feature')['missing_info'].map( ast.literal_eval)
for c in df.columns:
df[c] = df[c].mask(df[c].isin(d[c]))
A B C D E F G
0 NaN NaN 30 15.0 8.0 45.0 NaN
1 15.0 50. 0 5 2.0 5.0 7.0 NaN
2 NaN 4.0 30 NaN NaN 35.0
uj5u.com熱心網友回復:
提取缺失值:
import ast
...
# 為對應于feature_info的事件值創建存盤。
missing_indices={}。
# 處理來自df的每一列。
for i, col in enumerate(df.columns):
missing_indices[col] = [] 。
for r in df.itertuples() 。
# 遍歷列的每一行,將missing_info字串轉換為整數串列并進行比較。
if r[i 1] in ast. literal_eval(feature_info.set_index('feature').loc[col, 'missing_info'] )。
missing_indices[col].append(r.Index)
elif pd.isna(r[i 1]) 。
missing_indices[col].append(r.Index)
缺少的指數
輸出:
{'A'/span>: [0, 2], 'B': [0], 'C: [], 'D': [2], 'E': [2], 'F'/span>: [2], 'G': [0, 1]}。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/323852.html
標籤:
