2017-02-03 57 views
1

我有一个包含数值和字符串
数据帧夫妇列和我要删除所有字符,只留下数字如何从字符串中删除所有字符并仅在数据帧中保留数字?

Admit_DX_Description   Primary_DX_Description 
510.9 - EMPYEMA W/O FISTULA  510.9 - EMPYEMA W/O FISTULA 
681.10 - CELLULITIS, TOE NOS 681.10 - CELLULITIS, TOE NOS 
780.2 - SYNCOPE AND COLLAPSE 427.89 - CARDIAC DYSRHYTHMIAS NEC 
729.5 - PAIN IN LIMB   998.30 - DISRUPTION OF WOUND, UNSPEC 

Admit_DX_Description   Primary_DX_Description 
510.9        510.9 
681.10       681.10 
780.2        427.89 
729.5        998.30 

代码:

for col in strip_col: 
     # # Encoding only categorical variables 
     if df[col].dtypes =='object': 
      df[col] = df[col].map(lambda x: x.rstrip(r'[a-zA-Z]')) 

print df.head() 

错误:
回溯(最近通话最后一个):

df[col] = df[col].map(lambda x: x.rstrip(r'[a-zA-Z]')) 

文件 “/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/core/series.py”线2175,在地图 new_values = map_f(值,ARG) 文件 “熊猫/ SRC/inference.pyx”,线1217,在pandas.lib.map_infer(熊猫/ lib.c:63307)

df[col] = df[col].map(lambda x: x.rstrip(r'[a-zA-Z]')) 

AttributeError:'int'对象没有属性'rstrip'

回答

2

可以使用此示例:

我选择re模块仅提取浮点数。

import re 
import pandas 

df = pandas.DataFrame({'A': ['Hello 199.9', '19.99 Hello'], 'B': ['700.52 Test', 'Test 7.7']}) 

df 
      A   B 
0 Hello 199.9 700.52 Test 
1 19.99 Hello  Test 7.7 

for col in df: 
    df[col] = [''.join(re.findall("\d+\.\d+", item)) for item in df[col]] 

     A  B 
0 199.9 700.52 
1 19.99  7.7 

如果你有整数也改变re pattern这样:\d*\.?\d+

EDITED

对于TypeError我建议使用try。在这个例子中,我创建了一个列表errs。此列表将用于except TypeError。您可以通过print (errs)查看这些值。

也检查df

... 
... 
errs = [] 
for col in df: 
    try: 
     df[col] = [''.join(re.findall("\d+\.\d+", item)) for item in df[col]] 
    except TypeError: 
     errs.extend([item for item in df[col]]) 
+0

嘿它是一个很好的答案,但我得到这个错误** TypeError:期望的字符串或缓冲区**但我想出了一些字符串的值类似于这个“250.82 - DIABETES,.TYPE II”你有什么想法我可以处理这个 – kero

+0

我运行这个新的数据框:'df = pandas.DataFrame({'A':['250.82 - DIABETES,.TYPE II','19 .99 Hello'],'B':['700.52 Test','Test 7.7']})'并且我不得到任何'TypeError'。也许是另一种不同于*** 250.82的字符串 - 糖尿病,.TYPE II ***。 – estebanpdl

+0

我不知道,但它可能是这样的** V22.0 - SUPERVIS NORMAL 1ST PREG ** – kero

1

你应该看看df.applymap并将其应用于要从中删除文本的列。 [编辑] 或者:

import pandas as pd 
test = [{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}] 
fun = lambda x: x+10 
df = pd.DataFrame(test) 
df['c1'] = df['c1'].apply(fun) 
print df 
+0

我尝试过,但我得到这个错误** AttributeError的:“系列”对象有没有属性“applymap” ** – kero

+0

OK对不起,编辑我的答复 –

相关问题