2017-08-15 10 views
2

データ型が異なるデータフレームがあります。 浮動小数点型の精度を判断したいと思います。 私はこのコードで唯一のfloat64を選択することができます。データフレーム上でのセル単位の操作、精度の判定

df_float64 = df.loc[:, df.dtypes == np.float64] 

(わからない理由を持つ列のみ「ナン」の値も選択されているが、これは単なるサイドノートである)、このような当接精密Iの事を決定するために今すぐ

アプローチ:

precision = len(cell.split(".")[1] 

セルが文字列の場合。

各列に最高精度のcsv形式で出力します。このような

そう有するデータフレーム:

|  A|  B|  C|  D| 
| 0.01|0.0923| 1.0| 1.2| 
| 100.1| 203.3| 1.093| 1.9| 
| 0.0| 0.23| 1.03| 1.0| 

私はこれを持っているしたいと思います:

|  A|  B|  C|  D| 
|  2|  4|  3|  1| 

はパンダを使用して、このことは可能ですか?

おかげ

答えて

1

  • fillnaastypeため
  • ラムダ関数とapplyまたはlist comprehensionによって列によってループ
  • によってstrNaNs
  • キャストを取り除くための第一各列splitは、リストの2番目の値をで取得します。とlen
  • max値ゲット - 出力は、不可欠な

a = df.fillna(0).astype(str).apply(lambda x: x.str.split('.').str[1].str.len()).max() 
print (a) 
A 2 
B 4 
C 3 
D 1 
dtype: int64 

df = a.to_frame().T 
print (df) 
    A B C D 
0 2 4 3 1 

場合Series

  • 変換Seriesものと行データフレームであり、別の解決策:

    df = df.fillna(0).astype(str) 
    a = [df[x].str.split('.').str[1].str.len().max() for x in df] 
    
    df = pd.DataFrame([a], columns=df.columns) 
    print (df) 
        A B C D 
    0 2 4 3 1 
    
  • +1

    仕事をするためにNaNを取り除かなければならなかったdf_na = df.fillna(値= 0) – Submi

    +0

    私はあなたに感謝しなければなりません:)もう一度私を助けてくれました! – Submi

    +0

    私の答えが役に立ちましたら、[accept](http://meta.stackexchange.com/a/5235/295067)を忘れないでください。答えの横にあるチェックマーク( '✓')をクリックして、灰色で塗りつぶされた。ありがとう。 :) – jezrael

    1

    他の場合、私はあなたが

     
         A   B  C D 
    0 0.01 0.0923 1.000 1.2 
    1 100.10 203.3000 1.093 1.9 
    2 0.00 0.2300 1.030 1.0 
    
    ndf = pd.DataFrame(df.astype(str).applymap(lambda x: len(x.split(".")[-1])).max()).T 
    

    dfをデータフレームを持っている場合は、ナンを持っている場合は使用することができますあなたがapplymapすなわち

    を探していると思うつまり

    ndf = pd.DataFrame(df.astype(str).applymap(lambda x: len(x.split(".")[-1]) if x != 'nan' else 0).max()).T 
    

    出力:あなたが使用することができます

     
        A B C D 
    0 2 4 3 1 
    
    +1

    この1つも動作し。みんなありがとう! – Submi

    +0

    @Submiを助けることができてうれしい – Dark

    関連する問題