如何将数组中的日期作为字符串进行转换和计算?

问题描述 投票:0回答:1

我有以下数据集:

df = pd.DataFrame([
['B2', 'G2',[1291593600000000000, 1394755200000000000, 1397347200000000000,
 1506816000000000000, 1509494400000000000, None]],
['B10', 'G10',[1291593600000000000, 1394755200000000000, 1460505600000000000,
 1506816000000000000]], 
['B14', 'G14',[1291593600000000000, 1394755200000000000, 1460505600000000000,
 1506816000000000000]]], 
columns= ['Baum2', 'Baum7', 'value_pair'])

value_pair
中的值是unix时间的日期。

我想做的事: 我想检查每行中两个特定日期之间的差异(假设每个数组中的第三个日期减去第二个条目)是否超过 70 天。如果这是真的,我想删除该行。

我想在

value_pair
列中的每一行(我事先分组)中执行相同的操作。

问题:

我无法用unix时间计算日期,然后用

pd.to_datetime()
将它们转换为我想要的格式(据我所知)。减法有效,但转换无效:
<class 'numpy.ndarray'> is not convertible to datetime

第二种方法:

在将日期相减之前,我预先将它们设置为我想要的格式:

#df['value_pair'] = pd.to_datetime(df['value_pair'])
#df['value_pair'] = df['value_pair'].dt.strftime('%Y-%m-%d')

问题:

现在的问题是,在以下行之后我收到此错误:

TypeError: unsupported operand type(s) for -: 'numpy.str_' and 'numpy.str_'

erg1 = df['value_pair'][0][2]-df['value_pair'][0][1]

有道理,因为我不能像那样互相减去字符串。

就在这里,我没有主意了。有谁知道解决这个问题的不同方法?

我的代码:

import pandas as pd

df = pd.DataFrame([['Value1', 'Value2','2010-12-06' , '2014-03-14'],
['Value1', 'Value2','2014-04-13', '2017-10-01'], 
['Value1', 'Value2','2017-11-01',''],
['Value3', 'Value4', '2010-12-06', '2011-03-14'], 
['Value3', 'Value4', '2014-04-13', '2017-10-01']], columns=['ColumnA', 'ColumnB', 'ColumnC', 'ColumnD'])


df = pd.DataFrame([
['B2', 'G2',[1291593600000000000, 1394755200000000000, 1397347200000000000,
 1506816000000000000, 1509494400000000000, None]],
['B10', 'G10',[1291593600000000000, 1394755200000000000, 1460505600000000000,
 1506816000000000000]], 
['B14', 'G14',[1291593600000000000, 1394755200000000000, 1460505600000000000,
 1506816000000000000]]], columns= ['Baum2', 'Baum7', 'value_pair'])

df['value_pair'] = pd.to_datetime(df['value_pair'])
df['value_pair'] = df['value_pair'].dt.strftime('%Y-%m-%d')

erg1 = df['value_pair'][0][2]-df['value_pair'][0][1]

print(df)
python dataframe datetime strftime
1个回答
0
投票

首先检查将unix时间转换为pandas数据框中可读的日期

pd.to_datetime(df['date'],unit='s')
是他们使用的解决方案。

您可以使用

datetime

执行相同操作
import datetime
datetime.datetime.fromtimestamp(129159360)

输出:

datetime.datetime(1974, 2, 3, 16, 36)

但这对你的

value_pairs
不起作用,因为它有很多额外的尾随零。

例如,您的第一个

value_pair
条目是
1291593600000000000
,根据使用的尾随零,您会得到不同的日期:

print(datetime.datetime.fromtimestamp(12915936))
print(datetime.datetime.fromtimestamp(129159360))
print(datetime.datetime.fromtimestamp(1291593600))
print(datetime.datetime.fromtimestamp(12915936000))

输出:

1970-05-30 07:45:36
1974-02-03 16:36:00
2010-12-05 19:00:00
2379-04-16 20:00:00

任何更高的尾随零都会给您带来错误。因此,您必须先清理数据,然后才能转换时间戳并获取时间差/增量

© www.soinside.com 2019 - 2024. All rights reserved.