2017-10-03 8 views
-1
に文字列やラウンドの列から浮い

私はエキスは、小数点以下2桁

4.5678 
5 
7.987.998 

は、私は、小数点

4.56 
5 
7.98 
後にのみ2値のデータを抽出したい列の値を持つデータフレームを使用している場合

データは文字列として格納されます。どんな助けもありがとう。ありがとうございました !

+0

"DF"?あなたはデータフレームを意味すると思いますか?あなたは 'pandas'を使っていると仮定しますか?これらは重要なタグです。 –

+0

はい。私はデータフレームを意味しました。ありがとうございました ! – beginnerdscientist

+0

@beginnerdscientist覚えておいて欲しい答えはあなたの質問に答えることはできません。それはパンダとは関係ありません。下記を参照してください:https://stackoverflow.com/a/46553671/4909087 –

答えて

0
str = "7.987.998" 
ind = str.find('.') 
if ind > 0: 
    res = str[:ind+3] 
+0

findは、探している特殊文字の最初の出現のインデックスを返します。ここでは '.' – ZiGaelle

+0

これはパンダとは関係ありませんその質問には答えません。 –

0
def get_two_spaces(input): 
    input_list = input.split('.') 
    if len(input_list) >= 2: 
     return input_list[0] + '.' + input_list[1][:2] 
    return input 

私はここで何が起こっている打破う:

  1. 我々はピリオド文字の周りの文字列のリストに文字列を分割します。
  2. 2以上がある場合に存在しない場合、我々は全体の最初の文字列、期間、及び第2ストリング
  3. の最初の2つの文字を返し、:私たちはそのリストにあるどのように多くの項目を参照
  4. 元の入力を返します。
  5. + round str.extractを使用して
0
print(s) 
0  4.5678 
1   5 
2 7.987.998 
Name: 0, dtype: object 

print(type(s)) 
Out[152]: pandas.core.series.Series 

r = s.str.extract('(\d+(?:\.\d+)?)', \ 
      expand=False).astype(float).round(2) 
print(r) 
0 4.57 
1 5.00 
2 7.99 
Name: 0, dtype: float64 

あなたの予想出力は説明として残念ながら、5は混合型につながること、整数にすることはできず、一般的です落胆した。

0

パンダアプローチ:

import pandas as pd 

df = pd.DataFrame(['4.5678','5','7.987.998'], columns=['A']) 
s = df['A'].replace(to_replace='^(\d+\.\d+)\.\d+', value=r'\1', regex=True)\ 
    .astype('float').map('{:,.2f}'.format) 

print(s) 

出力:

0 4.57 
1 5.00 
2 7.99 
Name: A, dtype: object 
関連する問題