10

私のテーブル:

In [15]: csv=u"""a,a,,a
   ....: b,b,,b
   ....: c,c,,c
   ....: """

In [18]: df = pd.read_csv(io.StringIO(csv), header=None)

空の列を「UNKNOWN」として埋めます

In [19]: df
Out[19]: 
   0  1   2  3
0  a  a NaN  a
1  b  b NaN  b
2  c  c NaN  c

In [20]: df.fillna({2:'UNKNOWN'})

エラーが発生しました

ValueError: could not convert string to float: UNKNOWN
4

3 に答える 3

10

あなたの2列にはおそらくfloat dtypeがあります:

>>> df
   0  1   2  3
0  a  a NaN  a
1  b  b NaN  b
2  c  c NaN  c
>>> df.dtypes
0     object
1     object
2    float64
3     object
dtype: object

したがって、問題。フレーム全体を に変換しても構わない場合はobject、次のことができます。

>>> df.astype(object).fillna("UNKNOWN")
   0  1        2  3
0  a  a  UNKNOWN  a
1  b  b  UNKNOWN  b
2  c  c  UNKNOWN  c

文字列以外のデータがあるかどうかに応じて、列の dtype の変換についてより選択的にしたり、読み取り時に dtype を指定したりする必要があるかもしれませんが、とにかく上記は機能するはずです。


更新: 保持したい dtype 情報がある場合は、元に戻すのではなく、別の方法で、次のループを使用して、必要な列にのみ入力しますfillna

>>> df
   0  1  2   3  4   5
0  0  a  a NaN  a NaN
1  1  b  b NaN  b NaN
2  2  c  c NaN  c NaN
>>> df.dtypes
0      int64
1     object
2     object
3    float64
4     object
5    float64
dtype: object
>>> for col in df.columns[pd.isnull(df).all()]:
...         df[col] = df[col].astype(object).fillna("UNKNOWN")
...     
>>> df
   0  1  2        3  4        5
0  0  a  a  UNKNOWN  a  UNKNOWN
1  1  b  b  UNKNOWN  b  UNKNOWN
2  2  c  c  UNKNOWN  c  UNKNOWN
>>> df.dtypes
0     int64
1    object
2    object
3    object
4    object
5    object
dtype: object

または(を使用している場合all)、まったく使用fillnaしないこともあります:

>>> df
   0  1  2   3  4   5
0  0  a  a NaN  a NaN
1  1  b  b NaN  b NaN
2  2  c  c NaN  c NaN
>>> df.ix[:,pd.isnull(df).all()] = "UNKNOWN"
>>> df
   0  1  2        3  4        5
0  0  a  a  UNKNOWN  a  UNKNOWN
1  1  b  b  UNKNOWN  b  UNKNOWN
2  2  c  c  UNKNOWN  c  UNKNOWN
于 2013-04-17T18:25:17.630 に答える
4

回避策として、列を直接設定するだけで、fillna アップコンバージョンが機能するはずですが、これはバグです。

In [8]: df = pd.read_csv(io.StringIO(csv), header=None)

In [9]: df
Out[9]: 
   0  1   2  3
0  a  a NaN  a
1  b  b NaN  b
2  c  c NaN  c

In [10]: df.loc[:,2] = 'foo'

In [11]: df
Out[11]: 
   0  1    2  3
0  a  a  foo  a
1  b  b  foo  b
2  c  c  foo  c

In [12]: df.dtypes
Out[12]: 
0    object
1    object
2    object
3    object
dtype: object
于 2013-04-17T18:41:10.373 に答える