web-dev-qa-db-ja.com

型変換python AttributeError: 'str' object has no attribute 'astype'

python pandasでの型変換に混乱しています

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

ここでdfはpandasシリーズであり、その内容は2つの文字列であり、これにastype(float)を適用できますpandasシリーズ、それは正しくすべての文字列を浮動小数点数に変換します。

_df['a'][1].astype(float)
_

attributeError: 'str'オブジェクトには属性 'astype'がありません。私の質問は次のとおりです。シリーズ全体を文字列からフロートに変換できましたが、このシリーズのエントリを文字列からフロートに変換できませんでしたか?

また、生データセットをロードします

_df['id'].astype(int)
_

これはValueError:基数10のint()には無効なリテラルを生成します: ''これは、私の_df['id']_に空白があることを示唆しているようです。だから私はそれが正しいかどうかを入力して確認します

_'' in df['id']
_

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

7
ftxx

df['a']は、系列のすべての要素を別の要素に変換するベクトル化された方法としてSeriesを含むastypeオブジェクトを返します。

df['a'][1]は、データフレームの1つのセルのコンテンツを返します。この場合は、文字列'0.123'です。これは、この関数を持たないstrオブジェクトを返すようになりました。これを変換するには、通常のpython命令を使用します:

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

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

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

2番目の質問に従って、最後に__contains__を引数として''を呼び出す系列に対して呼び出す演算子inは、演算子のdocstringです。

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  
9
Boud

_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番目の質問では、生データに空の値がある可能性があります。正しいテストは次のとおりです。

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

2番目の質問のソース: https://stackoverflow.com/a/21320011/5335508

2
Ricardo Busquet
data1 = {'age': [1,1,2, np.nan],
        'gender': ['m', 'f', 'm', np.nan],
        'salary': [2,1,2, np.nan]}

x = pd.DataFrame(data1)
for i in list(x.columns):
    print(type((x[i].iloc[1])))
    if isinstance(x[i].iloc[1], str):
        print("It is String")
    else:
        print('Not a String')
0
kamran kausar