2017-09-25 52 views
0

我试图从dfA中删除dfB中的项目。熊猫将列转换为整数不起作用

事情是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')

之前。

如果你还可以分享excel文件,我可以仔细看看。