UPDATE:
ではなく、1,2または3の 補間すなわち後に元の形に戻ってデータを変換する方法はあります、曇り風と雨の 再び持っていますか?
ソリューション:私は意図的にあなたの元DFに複数の行を追加しました:
In [129]: df
Out[129]:
col1 col2
0 5 cloudy
1 3 windy
2 6 NaN
3 7 rainy
4 10 NaN
5 5 cloudy
6 10 NaN
7 7 rainy
In [130]: df.dtypes
Out[130]:
col1 int64
col2 category
dtype: object
In [131]: df.col2 = (df.col2.cat.codes.replace(-1, np.nan)
...: .interpolate().astype(int).astype('category')
...: .cat.rename_categories(df.col2.cat.categories))
...:
In [132]: df
Out[132]:
col1 col2
0 5 cloudy
1 3 windy
2 6 rainy
3 7 rainy
4 10 cloudy
5 5 cloudy
6 10 cloudy
7 7 rainy
OLD "数値" の答え:
:
IIUCあなたがこれを行うことができます
In [66]: df
Out[66]:
col1 col2
0 5 cloudy
1 3 windy
2 6 NaN
3 7 rainy
4 10 NaN
最初に分解してcol2
:
In [67]: df.col2 = pd.factorize(df.col2, na_sentinel=-2)[0] + 1
In [68]: df
Out[68]:
col1 col2
0 5 1
1 3 2
2 6 -1
3 7 3
4 10 -1
今我々はそれを補間することができる(S 'のNaN
とS' -1
を置き換える):
In [69]: df.col2.replace(-1, np.nan).interpolate().astype(int)
Out[69]:
0 1
1 2
2 2
3 3
4 3
Name: col2, dtype: int32
同じアプローチが、category
DTYPEに補間直列変換:
In [70]: df.col2.replace(-1, np.nan).interpolate().astype(int).astype('category')
Out[70]:
0 1
1 2
2 2
3 3
4 3
Name: col2, dtype: category
Categories (3, int64): [1, 2, 3]
完璧に動作します。補間後にデータを元の形式に戻す方法はありますか?すなわち1,2または3の代わりに 'cloudy'、' windy'および 'rainy'をもう一度使用しますか? –
@WasswaSamuel、私は自分の答えを更新しました - – MaxU
をチェックしてください。今日は帰宅するfactorize()と補間():) – Vaishali