Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “重新搜索”;TypeError:应为字符串或字节,如object“;_Python_Regex_Datetime - Fatal编程技术网

Python “重新搜索”;TypeError:应为字符串或字节,如object“;

Python “重新搜索”;TypeError:应为字符串或字节,如object“;,python,regex,datetime,Python,Regex,Datetime,在我的数据框“df”中有一列“Datetime”,包含500行。每行包含一个字符串对象,如下所示:2018-12-23T10:42:09.690Z 在两个不同的列(日期和时间)中分隔日期和时间将非常有用 日期 2018-12-23 时间 10:42:09.69 我尝试了以下代码: #Input: string = df['Datetime'] #Date regex_res = re.search(r'(([0-9]{4})[-]([0-9]{2})[-]([0-9]{2}))', string

在我的数据框“df”中有一列“Datetime”,包含500行。每行包含一个字符串对象,如下所示:2018-12-23T10:42:09.690Z

在两个不同的列(日期和时间)中分隔日期和时间将非常有用

日期 2018-12-23

时间 10:42:09.69

我尝试了以下代码:

#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
如果我只在“2018-12-23T10:42:09.690Z”这样的特定字符串上使用,它确实有效

我做过的测试:

检查空值。对于每一行,输出都给我“False”

nan_rows = [df['Datetime'].isnull()]
每一行的类型都是“class'str'”

我做错了什么? 谢谢你的帮助

问候,


Elle

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

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

详细信息

  • \b
    -单词边界(如果日期时间可以粘贴到单词字符,则删除)
  • (\d{4}-\d{2}-\d{2})
    -第1组(日期):4位、
    -
    、2位、
    -
    和2位
  • T
    -一个
    T
    字母
  • (\d{2}:\d{2}:\d{2}\.\d*?)
    -第2组(时间):2个数字,冒号,重复三次,然后是a
    和任何0或更多数字,但尽可能少
  • 0*
    -零个或更多
    0
    字符
  • Z
    -一个
    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*)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

详细信息

  • \b
    -单词边界(如果日期时间可以粘贴到单词字符,则删除)
  • (\d{4}-\d{2}-\d{2})
    -第1组(日期):4位、
    -
    、2位、
    -
    和2位
  • T
    -一个
    T
    字母
  • (\d{2}:\d{2}:\d{2}\.\d*?)
    -第2组(时间):2个数字,冒号,重复三次,然后是a
    和任何0或更多数字,但尽可能少
  • 0*
    -零个或更多
    0
    字符
  • Z
    -一个
    Z
    字母
  • \b
    -单词边界(如果日期时间可以粘贴到单词字符,则删除)

工作正常!非常感谢你!谢谢你的链接!天哪!:)工作得很好!非常感谢你!谢谢你的链接!天哪!:)工作得很好!非常感谢你!谢谢你的链接!天哪!:)工作得很好!非常感谢你!谢谢你的链接!天哪!:)