我在数据框中有几列包含数值和字符串
我想删除所有字符并仅保留数字
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(values,arg)
在pandas.lib.map_infer中的文件“ pandas / src / inference.pyx”,第1217行(pandas / lib.c:63307)
df[col] = df[col].map(lambda x: x.rstrip(r'[a-zA-Z]'))
AttributeError:“ int”对象没有属性“ rstrip”
最佳答案
您可以使用以下示例:
我选择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+
。已编辑
对于
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]])
关于python - 如何从字符串中删除所有字符并仅在数据帧中保留数字?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42032383/