Python “重新搜索”;TypeError:应为字符串或字节,如object“;
在我的数据框“df”中有一列“Datetime”,包含500行。每行包含一个字符串对象,如下所示:2018-12-23T10:42:09.690Z 在两个不同的列(日期和时间)中分隔日期和时间将非常有用 日期 2018-12-23 时间 10:42:09.69 我尝试了以下代码: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
#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
-第1组(日期):4位、(\d{4}-\d{2}-\d{2})
、2位、-
和2位-
-一个T
字母T
-第2组(时间):2个数字,冒号,重复三次,然后是a(\d{2}:\d{2}:\d{2}\.\d*?)
和任何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
-第1组(日期):4位、(\d{4}-\d{2}-\d{2})
、2位、-
和2位-
-一个T
字母T
-第2组(时间):2个数字,冒号,重复三次,然后是a(\d{2}:\d{2}:\d{2}\.\d*?)
和任何0或更多数字,但尽可能少
-零个或更多0*
字符0
-一个Z
字母Z
-单词边界(如果日期时间可以粘贴到单词字符,则删除)\b