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']
_
それは偽を言います。だから私は非常に混乱しています。
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
_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
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')