2017-12-06 12 views
0

以下のスクリーンショットに示すように、Excelファイルには2つの列があります。私は100.54000000000001から100.540のような数値フィールドの精度を下げようとしています。数値は文字列として格納されますので、floatに変換するとデータフレーム列:数字のみをintに変換し、文字列として残す単語

df['Unnamed: 5'] = pd.to_numeric(df['Unnamed: 5'], errors='coerce') 

文字列をNaNに変換します。誰も私の問題を助けることができますか?私は整数だけをintに変換しようとしており、単語は文字列のままでなければなりません。

screenshot of the data

EDIT:それらを丸めた後、戻って文字列に数値を変換するために許容可能です。私のコードは次の通りです:

>>> import pandas as pd 
>>> import numpy as np 
>>> xl = pd.ExcelFile("WSJ_template.xls") 
>>> xl.sheet_names 
[u'losers', u'winners'] 
>>> dfw = xl.parse("winners") 
>>> dfw.head() 
<output> 
>>> dfw = dfw.apply(pd.to_numeric, errors='coerce').combine_first(dfw) 
>>> dfw = dfw.replace(np.nan, '', regex=True) 
>>> dfw 
<output> 
+0

cols_to_process = ['Unnamed: 5', 'Unnamed: 6'] for col in cols_to_process: df[col] = df[col].apply(round_only_nums) 

そして、我々の結果データフレームの丸められた後にデータがstrに変換されることに満足していますか? – RagingRoosevelt

+0

はい、それもうまくいくでしょう。ありがとう – frisbeee

+0

はい、それも動作します。 私はコードを作成し、彼のSQLコードに組み込むためにそれを人に送りましたが、それは彼のためには機能しませんでした。私はジュピターを使用し、彼は他のものを使用します。 XL = pd.ExcelFile( "WSJ_template.xls")NP としてPDインポートnumpyのよう インポートパンダ xl.sheet_names [u'losers'、u'winners'] DFW = XLを次のように自分のコードです。 (dfw) dfw = dfw.replace(np.nan、 ''、regex = "dfw"); dfw.headerは、真) dfw ありがとう – frisbeee

答えて

0

すでにご存知のように、私たちはpd.DataFrame.applyを使用するのが最良です。唯一の違いは、組み込み関数を使用するのではなく、独自の関数を定義することです。

は、私たちは(あなたはすでにこれをカバーしている、これはプレースホルダです)データフレームを充填することから始めましょう:

df = pd.DataFrame(columns=['Unnamed: 5', 'Unnamed: 6'], 
        data=[['NaN', 'NaN'], 
         ['Average', 'Weekly'], 
         ['100.540000000001', '0.2399999999999999'], 
         ['99.3299999999998', '0.1700000000000001'], 
         ['95.4800000000004', 'change'], 
         ['bid', '1.929999999999999']]) 

は、今、私たちは値を変換するために使用する関数を定義します。この関数はfloatにキャストしようとする必要があり、それが機能する場合は、丸められた値を返します。うまくいかない場合は、元の値を返してください。ここでは一つの可能​​なルートがあります:

def round_only_nums(val): 
    try: 
     return '%s' % round(float(val), 3) 
    except: 
     return val 

次に、の処理を必要とする列のことを適用してみましょう:あなたは、カラム内のデータ型を混在させることはできません

>>> df 
    Unnamed: 5 Unnamed: 6 
0  nan  nan 
1 Average  Weekly 
2  100.54  0.24 
3  99.33  0.17 
4  95.48  change 
5  bid  1.93 
関連する問題