在我的数据框“ 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
答案 0 :(得分:0)
要将日期和时间从现有列中提取到单独的列中,您可以使用
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上,则删除该单词)