re.search“ TypeError:预期的字符串或类似字节的对象”

在我的数据框“ df”中,我有一列“ Datetime”,其中包含500行。每行包含一个类似于以下内容的字符串对象: 2018-12-23T10:42:09.690Z

将日期和时间分成两个不同的列(日期和时间)将非常有帮助。

日期 2018-12-23

时间 10:42:09.69

我尝试了以下代码:

componentDidmount

如果我仅在诸如“ 2018-12-23T10:42:09.690Z”之类的特定字符串上使用,它确实可以工作。

#Input:
string = df['Datetime']
#Date
regex_res = re.search(r'(([0-9]{4})[-]([0-9]{2})[-]([0-9]{2}))',string)
print(regex_res.group())

#Output:
TypeError: expected string or bytes-like object

我已经完成的测试:

检查是否为空。输出给我每一行“ False”。

#Input:
test = "2018-12-23T10:42:09.690Z"
#Date
regex_res = re.search(r'(([0-9]{4})[-]([0-9]{2})[-]([0-9]{2}))',test)
print(regex_res.group())
#Output:
2018-12-23

每行的类型均为“类'str'”

nan_rows = [df['Datetime'].isnull()]

我在做什么错? 感谢您的帮助!

此致

Elle

jujumickey 回答:re.search“ TypeError:预期的字符串或类似字节的对象”

要将日期和时间从现有列中提取到单独的列中,您可以使用

df[['date','time']] = df['Datetime'].str.extract(r'\b(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2}\.\d*)Z\b')

或者,为了消除毫秒部分的尾随零:

 df[['date','time']] = df['Datetime'].str.extract(r'\b(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2}\.\d*?)0*Z\b')

正则表达式为

\b(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2}\.\d*?)0*Z\b

请参见pattern demo

详细信息

  • \b-单词边界(如果可以将日期时间粘贴到单词char上,则删除该单词)
  • (\d{4}-\d{2}-\d{2})-第1组(日期):4位数字,-,2位数字,-和2位数字
  • T-一封T字母
  • (\d{2}:\d{2}:\d{2}\.\d*?)-第2组(时间):冒号2位,重复3次,然后输入.和0或更多位数,但尽可能少
  • 0*-零个或多个0字符
  • Z-一封Z字母
  • \b-单词边界(如果可以将日期时间粘贴到单词char上,则删除该单词)
本文链接:https://www.f2er.com/3159126.html

大家都在问