2017-11-20 5 views
1

dfには、マイナス記号を持つ列があります。つまり、一部の列文字列値の最後の文字として-です。今私はpandas seriesは、最後の文字として特定の文字列を見つけます。

df['amount'] 
0   3.60- 
1   1.70 
2   1.80 
3   1.20 
4   1.22- 
Name: amount, Length: 5, dtype: object 

はので、各文字列のために、私は、文字列の先頭に-を入れて

df['amount'][default_int_index] = df['amount'][default_int_index][-1:] + df['amount'][default_int_index][:-1] 

を行うことができます、ということを行う方法を疑問に思って、これらの文字列を検索します。条件付き交換用ので結果は、同じよう

0   -3.60 
1   1.70 
2   1.80 
3   1.20 
4   -1.22 

を見ていきますし、その後、float64

df['amount'] = df['amount'].astype(np.float64) 

答えて

4

をシリーズ全体を変換使用.str.endswithすなわち

mask = df['Amount'].str.endswith('-') 
 
0  True 
1 False 
2 False 
3 False 
4  True 
Name: Amount, dtype: bool 

使用np.whereすなわち

df['Amount'] = np.where(mask,'-'+df['Amount'].str[:-1],df['Amount']).astype(float) 

Ouptut:

 
0 -3.60 
1 1.70 
2 1.80 
3 1.20 
4 -1.22 
Name: Amount, dtype: float64 
2

あなたはreplaceを使用することができます。

df['amount'] = df['amount'].str.replace(r'(.+)-', r'-\1').astype(float) 

またはmatch float数の\d+\.\d+を使用します。また、 ' `のような文字列を検討する方法を

df['amount'] = df['amount'].str.replace(r'(\d+\.\d+)-', r'-\1').astype(float) 

print (df) 
    amount 
0 -3.60 
1 1.70 
2 1.80 
3 1.20 
4 -1.22 
+0

から354.72を'' in regex – daiyue

+0

申し訳ありません。 nd。 – jezrael

+0

決して気にしない、私はあなたの2番目の正規表現は '' 354.72-'(文字列の先頭にスペースを含む)のような文字列値が 'amount'カラムにあるときにうまく動作すると思います – daiyue

関連する問題