我已经切掉了pandas数据帧。
end_date = df[-1:]['end']
type(end_date)
Out[4]: pandas.core.series.Series
end_date
Out[3]:
48173 2017-09-20 04:47:59
Name: end, dtype: datetime64[ns]
48173
并仅获取2017-09-20 04:47:59
字符串?我必须使用2017-09-20 04:47:59
作为参数调用REST API,因此我必须从pandas datetime64
系列中获取字符串。 48173
并仅获取日期时间对象[类似datetime.datetime.strptime('2017-09-20 04:47:59', '%Y-%m-%d %H:%M:%S')
]。我需要它,因为稍后我将检查是否'2017-09-20 04:47:59' < datetime.datetime(2017,1,9)
我只需要转换单个单元格值,而不是整列。 如何进行这些转换?
答案 0 :(得分:3)
似乎你需要:
import pandas as pd
data = ['2017-09-20 04:47:59','2017-10-20 04:47:59','2017-09-30 04:47:59']
df = pd.DataFrame(data,columns=['end'])
df['end'] = pd.to_datetime(df['end'])
df
df
将是:
end
0 2017-09-20 04:47:59
1 2017-10-20 04:47:59
2 2017-09-30 04:47:59
之后,您可以使用以下代码删除索引并使用&#39;时间戳&#39;对象:
end_date = df['end'].iloc[-1] #get last row of column end
print(type(end_date)) # pandas.tslib.Timestamp
end_date_str = end_date.strftime('%Y-%m-%d %H:%M:%S') #convert to str
print(end_date_str) # '2017-09-30 04:47:59'
print(end_date < datetime.datetime(2017,1,9)) #False
答案 1 :(得分:2)
只需将结果转换为字符串,然后使用.values[0]
恢复它:
In [38]: end_date
Out[38]:
48173 2017-09-20 04:47:59
Name: end, dtype: datetime64[ns]
In [39]: end_date.astype(str).values[0]
Out[39]: '2017-09-20 04:47:59'
如果你想要一个datetime对象,你必须将它转换为时间戳,然后再转换回datetime
对象:
In [42]: end_date.values[0].item()
Out[42]: 1505882879000000000
In [43]: datetime.fromtimestamp(end_date.values[0].item()/10**9)
Out[43]: datetime.datetime(2017, 9, 20, 6, 47, 59)
否则,您可以strptime
在步骤1中恢复的字符串:
In [48]: datetime.datetime.strptime(end_date.astype(str).values[0], '%Y-%m-%d %H:%M:%S')
Out[48]: datetime.datetime(2017, 9, 20, 4, 47, 59)
您可能想知道为什么结果之间存在 2小时差异。这是因为datetime.datetime.fromtimestamp
考虑了我的时区(目前是CEST,即UTC + 2)。
另一方面,将字符串解析为datetime
对象并不会产生任何时区信息,srtptime
天真地解析时间戳而不考虑时区,这会导致2小时的差异。< / p>