我正在使用大量的csv(表格),我需要删除包含字符的单元格并保留数字单元格。
例如。
p1 p2 p3 p4 p5
dcf23e 2322 acc41 4212 cdefd
所以在这种情况下,我只想删除dcf23e,acc41和cdefd。删除这些字符串后,我想将它们保留为空单元格。
我该怎么做?提前谢谢。
我试过的代码是这个......,这段代码删除字符串中的字符,但问题是,如果一个字符串是23cdgf2,它会产生一个不是我想要的字符串232。删除所有字符后,当我尝试将字符串转换为int进行计算时,由于某些字符串有123def.24 - > 123.24
temp = ''.join([c for c in temp if c in '1234567890.']) # Strip all non-numeric characters
# Now converting strings to integers for calculations, Using function to use int() , because of the blank spaces cannot be converted to int
def mk_int(s):
s = s.strip()
return int(s) if s else 0
mk_int(temp)
print(temp)
答案 0 :(得分:3)
为性能编译正则表达式并将字符串拆分为正确性
import re
regex = re.compile(r'.*\D+.*')
def my_parse_fun(line):
return [regex.sub('', emt) for emt in line.split()]
从AbhiP的回答中,你也可以做到
[val if val.isdigit() else '' for val in line.split()]
答案 1 :(得分:2)
使用regex
import re
def covert_string_to_blank(_str):
return ['' if re.findall("[a-zA-Z]+", c) else c for c in _str.split()]
或使用isalpha
:
def convert_string_to_blank(_str):
return ['' if any(c.isalpha() for c in s) else s for s in _str.split()]
答案 2 :(得分:2)
我会使用一个简单的设置进行快速测试。
a = 'dcf23e 2322 acc41 4212 cdefd'
cleaned_val = lambda v: v if v.isdigit() else ''
[cleaned_val(val) for val in a.split()]
如果字符串是有效数字,它会给你结果,否则就是空字符串。
['','2322','','4212','']
但是,这仅提供字符串。如果要将值转换为整数(用0替换错误的值),请更改lambda:
convert_to_int = lambda v: int(v) if v.isdigit() else 0
[convert_to_int(val) for val in a.split()]
您的新结果将是所有有效整数:
[0,2322,0,4212,0]
答案 3 :(得分:0)
您是否尝试过使用for
语句的try
循环?
temp = ['dcf23e','2322','acc41','4212','cdefd']
index = 0
for element in temp:
try:
element+1
except:
del temp[index]
index = index+1
print temp
或者,如果要将值转换为int
元素,可以这样写:
temp = ['dcf23e','2322','acc41','4212','cdefd']
index = 0
for element in temp:
try:
element+1
except:
temp[index] = 0
index = index+1
print temp