我试图清理一些数据,并想检查字符串中是否有日期格式。如果有日期格式,我想删除它。
例如,我有这样的输入: "午夜10-22-13 HD"
我也是,我想删除HD并检查最后是否有日期并将其删除以及冒号后的条带字符之类的其他解析。
def func(value):
str(value)
if ":" in value:
return value.split(":", 1)[0]
if value.endswith('HD'):
return value[:-3]
else:
return value
我不想假设字符串是最后一个字符串,而是假设它是6位数字格式,然后返回没有日期的值。
我将这些功能应用于数据集系列中的值
data["LongTitleAdjusted"] = data["Long Title"].apply(func)
以下是输入的一些示例:
Stand-Up: "Weird Al" Yankovic
Stand-Up: "Weird Al" Yankovic HD
Doug Benson 3 HD
Midnight 11-14-13
Midnight 11-14-13 HD
Midnight 01-06-14
Midnight 01-06-14 HD
Midnight 01-07-14
期望的产出:
Stand-Up
Stand-Up
Doug Benson 3
Midnight
Midnight
Midnight
Midnight
Midnight
答案 0 :(得分:1)
试试这个:
lines = [
'Stand-Up: "Weird Al" Yankovic',
'Stand-Up: "Weird Al" Yankovic HD',
'Doug Benson 3 HD',
'Midnight 11-14-13',
'Midnight 11-14-13 HD',
'Midnight 01-06-14',
'Midnight 01-06-14 HD',
'Midnight 01-07-14'
]
def clean_string(string):
clean = string
if ":" in string:
clean = string.split(":")[0]
else:
if string.endswith(" HD"):
string = string.replace(" HD", "")
clean = string.split(" ")
try:
datetime.strptime(clean[-1], '%m-%d-%y')
clean = string.replace(clean[-1], "")
except ValueError:
clean = string
return clean
它实际上试图将日期字符串转换为日期;这意味着它不会删除无效日期(毕竟,它们可能是值)。如果您不关心这一点,可以将其替换为查找所有数字,str
isdigit()
方法或类似内容的正则表达式。
输出:
>>> for line in lines:
... print clean_string(line)
...
Stand-Up
Stand-Up
Doug Benson 3
Midnight
Midnight
Midnight
Midnight
Midnight
>>>
答案 1 :(得分:0)
使用正则表达式匹配日期模式并替换它。
import re
def func(x):
return re.sub(r'(.*)\d{2}[-/]\d{2}[-/]\d{2}(.*)', r'\1\2', x)