2017-02-22 114 views
1

我有熊猫数据帧与价值观变量如下转换对象以大熊猫串

print (df.xx) 

1   5679558 
2  (714) 254 
3    0 
4   00000000 
5  000000000 
6  00000000000 
7  000000001 
8  000000002 
9  000000003 
10  000000004 
11  000000005 

print (df.dtypes) 
xx   object 

我喜欢下面以将此转换为num

try: 
    print df.xx.apply(str).astype(int) 
except ValueError: 
    pass 

我也尝试这样

tin.tin = tin.tin.to_string().astype(int) 

但是这给了我MemoryError,因为我有3M行。

有些身体可以帮我剥离特殊字符并转换为int64吗?

回答

1

您可以测试字符串isdigit,然后使用布尔面膜这些行转换只能在一个向量化的方式,并使用to_numeric与PARAM errors='coerce'

In [88]: 
df.loc[df['xxx'].str.isdigit(), 'xxx'] = pd.to_numeric(df['xxx'], errors='coerce') 
df 

Out[88]: 
      xxx 
0 5.67956e+06 
1  (714) 254 
2    0 
3    0 
4    0 
5    0 
6    1 
7    2 
8    3 
9    4 
10   5 
+0

谢谢你,和预期一样。 – subro

+0

如果我的答案解决了你的问题,那么你可以接受它,在答案的左上角会有一个空的勾号标记 – EdChum

1

你可以在你的巨大的数据帧分割成块,例如这种方法可以做到这一点,你可以决定什么是块的大小:

def splitDataFrameIntoSmaller(df, chunkSize = 10000): 
    listOfDf = list() 
    numberChunks = len(df) // chunkSize + 1 
    for i in range(numberChunks): 
     listOfDf.append(df[i*chunkSize:(i+1)*chunkSize]) 
    return listOfDf 

之后,你有块,你可以在每个块适用你的函数分别。