2017-09-25 11 views
0

dfAからdfBにある項目を削除しようとしています。pandasがintに変換されないintに変換する

それはdfAがオブジェクト型であるため、intに変換しようとしています。私はこのエラーを取得し、ここで

dfA = pd.read_excel('small_file.xlsx',header=None) 
dfB = pd.read_csv('large_file.csv',header=None) 

dfA = dfA.convert_objects(convert_numeric=True) 
dfA[0] = pd.to_numeric(dfA[0],errors='coerce') 
dfA = dfA.dropna() 

# converting to int 
dfA[0] = dfA[0].astype(int) # THIS line gets error 


df_output = dfA[~dfA[0].isin(dfB[0])] 

は、DFAは

   0 
0  2293365227 
1  3045897298 
2  8162414592 
3  9312969810 
...   ... 

のように見えるものであるとDFB

   0 
0   2030000000 
1   2030156119 
2   2030389149 
...   ... 

ValueError: invalid literal for long() with base 10: 'Goulding'

答えて

0

これらのようなエラーが発生した場合は、常に詳細を確認することをお勧めします。

用途:

dfA.loc[dfA[0].str.contains('Goulding')] 

これが存在するインデックスを見つけて、何が起こっているかを確認します。次に、不良データを除外してシリーズに適用する関数を作成します。別のエラーが発生した場合は、すすぎ洗いを繰り返してください。

例:

def replace_str(x): 
    return re.search('\d+',x).group(0) 

dfA[0] = dfA[0].apply(replace_str) 
0

それがどのように見えるここ コードですいくつかのVAがあるlue - おそらく文字列'Goulding'です。これはintに変換できません。

あなたはto_numeric使用し、問題の価値がどこにあるのNaNを取得することができます:

dfA[0] = pd.to_numeric(dfA[0], errors='coerce')

前にint型に列全体を変換します。

また、Excelファイルを共有することができれば、私はより詳しく見ることができます。

関連する問題