我需要使用pandas修改Dataset
。以下是我需要处理的特定列的详细信息:
df["Dependents"].value_counts()
0 345
1 102
2 101
3+ 51
Name: Dependents, dtype: int64
df["Dependents"].notnull().value_counts()
True 599
False 15
Name: Dependents, dtype: int64
我需要逐一将null
值分配为0
,1
或2
。就像第一行一样,我指定0
,然后下一行应为1
,然后是2
。然后再从0
开始,直到填写所有null
值。
我怎样才能实现它?
答案 0 :(得分:3)
IIUC你可以这样做:
假设您有以下DF:
In [214]: df
Out[214]:
Dependents
0 NaN
1 0
2 0
3 0
4 NaN
5 1
6 NaN
7 3+
8 NaN
9 3+
10 2
11 3+
12 1
13 NaN
解决方案:
In [215]: idx = df.index[df.Dependents.isnull()]
In [216]: idx
Out[216]: Int64Index([0, 4, 6, 8, 13], dtype='int64')
In [217]: df.loc[idx, 'Dependents'] = np.take(list('012'), [x%3 for x in range(len(idx))])
In [218]: df
Out[218]:
Dependents
0 0
1 0
2 0
3 0
4 1
5 1
6 2
7 3+
8 0
9 3+
10 2
11 3+
12 1
13 1
答案 1 :(得分:2)
与MaxU的回答相似,但是使用numpy put with' wrap'模式。
Sample dataframe (df):
Dependents
0 NaN
1 0
2 0
3 0
4 NaN
5 1
6 NaN
7 3+
8 NaN
9 3+
10 2
11 3+
12 1
13 NaN
idx = df.index[df.Dependents.isnull()]
np.put(df.Dependents, idx, [0, 1, 2], mode='wrap')
Dependents
0 0
1 0
2 0
3 0
4 1
5 1
6 2
7 3+
8 0
9 3+
10 2
11 3+
12 1
13 1