我有以下数据集:
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)
首先检查将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
任何更高的尾随零都会给您带来错误。因此,您必须先清理数据,然后才能转换时间戳并获取时间差/增量