2017-01-29 22 views
2

を持っていない私はPythonのパンダに型変換によって混乱しています型変換「str」はオブジェクトが属性「astype」

df = pd.DataFrame({'a':['1.23', '0.123']}) 
type(df['a']) 
df['a'].astype(float) 

ここdfはパンダシリーズであり、その内容はその後、2列です私はastype(float)をこのパンダシリーズに適用することができ、すべての文字列を正しくfloatに変換します。しかし、

df['a'][1].astype(float) 

私にはAttributeError: 'str'オブジェクトには属性 'astype'がありません。私の質問は:どのようにすることができますか?シリーズ全体を文字列から浮動小数点に変換できますが、このシリーズの項目を文字列から浮動小数点に変換できませんでしたか?ベース10との)int型のための無効なリテラル(::

また、私は私の生データは、それがとValueErrorを発生さ

df['id'].astype(int) 

を設定ロード「」 この1つはブランクが私のdf['id']であることを示唆しているようです。だから私はそれが真であるかどうかを確認することによって、それが真であるかどうかを確認します。

'' in df['id'] 

偽と言います。だから私は非常に混乱しています。

答えて

3

df['a']は別のものにシリーズ内のすべての要素を変換するベクトル化の方法としてastypeを持つSeriesオブジェクトを返します。

df['a'][1]は、データフレームの1つのセルの内容を返します。この場合は、文字列'0.123'が返されます。これで、この機能を持たないオブジェクトstrが返されます。それは通常のPythonの命令を使用変換するには:あなたの2番目の質問を1として

type(df['a'][1]) 
Out[25]: str 

float(df['a'][1]) 
Out[26]: 0.123 

type(float(df['a'][1])) 
Out[27]: float 

を、最後に引数として''と直列に対する__contains__を呼び出しているオペレータinは、ここではオペレータのドキュメンテーション文字列は次のとおりです。

help(pd.Series.__contains__) 
Help on function __contains__ in module pandas.core.generic: 

__contains__(self, key) 
    True if the key is in the info axis 

これは、inオペレータがインデックス内の空の文字列を検索していて、その内容ではないことを示しています。

df 
Out[54]: 
    a 
0 42 
1  

'' in df 
Out[55]: False 

df=='' 
Out[56]: 
     a 
0 False 
1 True 

df[df['a']==''] 
Out[57]: 
    a 
1 
+0

感謝:

あなたの空の文字列を検索する方法は等しい演算子を使用することです!私は短いフォローアップの質問があります。したがって、あなたの例 'df'では、数字42がdfにあるかどうかを確認したい場合は、df [42でdf ['a']'または42をdf [['a ']] 'そう? inはパンダシリーズのインデックスをチェックしていますか? '' df [['']] 'はどうでしょうか?それはパンダのデータフレームです。したがって、データフレーム上で動作しているときに 'in'がインデックスをチェックしていますか? – ftxx

+0

データフレームと同じ仕組み。だからdf == 42 – Boud

1

df['a'][1]実際には文字列である位置1の配列内の実際の値を返します。 float(df['a'][1])を使用して変換できます。

>>> df = pd.DataFrame({'a':['1.23', '0.123']}) 
>>> type(df['a']) 
<class 'pandas.core.series.Series'> 
>>> df['a'].astype(float) 
0 1.230 
1 0.123 
Name: a, dtype: float64 
>>> type(df['a'][1]) 
<type 'str'> 

2番目の質問では、生データに空の値がある可能性があります。正しいテストは次のようになります。2番目の質問について

>>> df = pd.DataFrame({'a':['1', '']}) 
>>> '' in df['a'].values 
True 

出典:https://stackoverflow.com/a/21320011/5335508

関連する問題