web-dev-qa-db-ja.com

Pandasの型がfloatであるか、特定の型ですか?

データフレームdfには、float64型の列がいくつかあり、その他の列はオブジェクト型です。混合された性質のため、私は使用できません

df.fillna('unknown') #getting error "ValueError: could not convert string to float:"

タイプがfloat64の列でエラーが発生したため(紛らわしいエラーメッセージです!)

だから私は次のようなことをしたいと思います

for col in df.columns[<dtype == object>]:
    df[col] = df[col].fillna("unknown")

だから私の質問は、df.columnsで使用できるようなフィルター式があるかどうかです?

代わりに、それほどエレガントではないが、私はできると思います:

 for col in df.columns:
        if (df[col].dtype == dtype('O')): # for object type
            df[col] = df[col].fillna('') 
            # still puzzled, only empty string works as replacement, 'unknown' would not work for certain value leading to error of "ValueError: Error parsing datetime string "unknown" at position 0" 

また、上記のコードで ''を「不明」に置き換えるコードが特定のセルで機能するが、「ValueError:Error parsing datetime string "unknown" at position 0」というエラーで失敗する理由も知りたい

どうもありがとう!

ゆう

34
Yu Shen

Dtypes属性を使用して、すべての列のdtypeを確認できます。

In [11]: df = pd.DataFrame([[1, 'a', 2.]])

In [12]: df
Out[12]: 
   0  1  2
0  1  a  2

In [13]: df.dtypes
Out[13]: 
0      int64
1     object
2    float64
dtype: object

In [14]: df.dtypes == object
Out[14]: 
0    False
1     True
2    False
dtype: bool

オブジェクト列にアクセスするには:

In [15]: df.loc[:, df.dtypes == object]
Out[15]: 
   1
0  a

私はそれを使用することが最も明示的だと思います(私はsureではありません)

In [16]: df.loc[:, df.dtypes == object] = df.loc[:, df.dtypes == object].fillna('')

それを言って、 欠落データのNaN を使用することをお勧めします。

28
Andy Hayden

これはコンサイザーです:

# select the float columns
df_num = df.select_dtypes(include=[np.float])
# select non-numeric columns
df_num = df.select_dtypes(exclude=[np.number])
47
RNA