在python中拆分带有日期的数组
我有一个由1列和1980796行组成的数组,其中充满了日期。日期类型如下所示: '2018-01-01 00:00:00 +01:00' 我试图将日期分成两个不同的数组,一个按天,另一个按小时。下面是我正在处理的代码部分,用于提取这两个数组:在python中拆分带有日期的数组,python,arrays,string,numpy,split,Python,Arrays,String,Numpy,Split,我有一个由1列和1980796行组成的数组,其中充满了日期。日期类型如下所示: '2018-01-01 00:00:00 +01:00' 我试图将日期分成两个不同的数组,一个按天,另一个按小时。下面是我正在处理的代码部分,用于提取这两个数组: time=np.array(parameters[:,2]) time1=time.astype(str) month=[] hour=[] for i in (time1): month.appe
time=np.array(parameters[:,2])
time1=time.astype(str)
month=[]
hour=[]
for i in (time1):
month.append(i.split(' ')[0])
hour.append(i.split(' ')[1])
month1=np.array(month)
hour1=np.array(hour)
运行代码时,我收到以下错误:
Traceback (most recent call last):
File "<ipython-input-136-3cf951a10e93>", line 12, in <module>
hour.append(i.split(' ')[1])
IndexError: list index out of range
最后,当我勾选时,新数组的形状与time1数组不同。我只想拆分日期,并获得两个新数组,其形状与所有索引中的初始数组相同。如果您具有所需的数据质量,则您的方法是正确的。下面是一个工作示例解决方案:将数据拆分为月数和小时数的numpy数组以测试数据质量,尝试打印出符合或不符合预期时间戳格式的所有日期:
from datetime import datetime, timedelta
import numpy as np
parameters = [datetime.today() - timedelta(days=x) for x in range(5)]
months, hours = [], []
for dt in parameters:
month = str(dt).split(' ')[0].split('-')[1]
hour = str(dt).split(' ')[1].split(':')[1]
months.append(month)
hours.append(hour)
months = np.array(months)
hours = np.array(hours)
print(f"{months = }")
print(f"{hours = }")
返回:
months = array(['06', '06', '06', '06', '06'], dtype='<U2')
hours = array(['14', '14', '14', '14', '14'], dtype='<U2')
如果您具有所需的数据质量,那么您的方法是正确的。下面是一个工作示例解决方案:将数据拆分为月数和小时数的numpy数组以测试数据质量,尝试打印出符合或不符合预期时间戳格式的所有日期:
from datetime import datetime, timedelta
import numpy as np
parameters = [datetime.today() - timedelta(days=x) for x in range(5)]
months, hours = [], []
for dt in parameters:
month = str(dt).split(' ')[0].split('-')[1]
hour = str(dt).split(' ')[1].split(':')[1]
months.append(month)
hours.append(hour)
months = np.array(months)
hours = np.array(hours)
print(f"{months = }")
print(f"{hours = }")
返回:
months = array(['06', '06', '06', '06', '06'], dtype='<U2')
hours = array(['14', '14', '14', '14', '14'], dtype='<U2')
您需要决定如何处理坏数据条目: 在解析代码周围添加Try-and-Except块 到达时,应打印出导致错误的原始字符串。 然后您应该忽略标记为坏的字符串,并继续for循环。 或者通过抛出错误来结束程序,并手动修复输入日期 一条注释:在将其添加到数组之前,应该解析所有内容,因为如果在小时发生错误,则不希望将其他值附加到月份。所以首先解析这两个值,并将它们放入一个变量中。只有当您知道它们都很好时,才能将它们附加到数组中
try:
parsed_month=i.split(' ')[0]
parsed_hour=i.split(' ')[1]
month.append(parsed_month)
hour.append(parsed_hour)
except: # catch *all* exceptions
# print out the string
# print out the error
# maybe exit the program with an error (because the input)
您需要决定如何处理坏数据条目: 在解析代码周围添加Try-and-Except块 到达时,应打印出导致错误的原始字符串。 然后您应该忽略标记为坏的字符串,并继续for循环。 或者通过抛出错误来结束程序,并手动修复输入日期 一条注释:在将其添加到数组之前,应该解析所有内容,因为如果在小时发生错误,则不希望将其他值附加到月份。所以首先解析这两个值,并将它们放入一个变量中。只有当您知道它们都很好时,才能将它们附加到数组中
try:
parsed_month=i.split(' ')[0]
parsed_hour=i.split(' ')[1]
month.append(parsed_month)
hour.append(parsed_hour)
except: # catch *all* exceptions
# print out the string
# print out the error
# maybe exit the program with an error (because the input)
也许你可以尝试这样的方法来避免糟糕的约会:
import numpy as np
dates = ['2018-01-01 00:00:00 +01:00', '2018-01-02 01:00:00 +01:00', '2018-01-0302:00:00 +01:00']
arr = np.array(dates).astype(str)
month, hour = [], []
for i in arr:
if i.count(' ')==2:
m, h, _ = i.split(' ')
month.append(m)
hour.append(h)
else:
print('Value "{0}" does not contain 2 spaces like the rest!'.format(i))
month = np.array(month)
hour = np.array(hour)
也许你可以尝试这样的方法来避免糟糕的约会:
import numpy as np
dates = ['2018-01-01 00:00:00 +01:00', '2018-01-02 01:00:00 +01:00', '2018-01-0302:00:00 +01:00']
arr = np.array(dates).astype(str)
month, hour = [], []
for i in arr:
if i.count(' ')==2:
m, h, _ = i.split(' ')
month.append(m)
hour.append(h)
else:
print('Value "{0}" does not contain 2 spaces like the rest!'.format(i))
month = np.array(month)
hour = np.array(hour)
其中一行没有空格,拆分失败。这是可以修复的吗?取决于您希望如何处理格式不正确的数据。如果可以删除这些行,当然可以。如果可能的话,我希望保留它们。此外,您可以在循环中放置一个printi语句,查看代码失败的值。其中一行没有空格,拆分失败。这是可以修复的吗?取决于您希望对格式不正确的数据执行什么操作。如果可以删除这些行,当然可以。如果可能的话,我想保留它们。此外,您可以在循环中放入printi语句,查看代码失败的值。