1

我已经切片了熊猫数据框。

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] 
  1. 如何摆脱 end_date 的索引值48173并只获取2017-09-20 04:47:59字符串?我必须调用 REST API2017-09-20 04:47:59作为参数,所以我必须从熊猫datetime64系列中获取字符串。
  2. 如何摆脱 end_date 的索引值48173并仅获取 datetime 对象 [类似于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)

我只需要转换一个单元格值,而不是一整列。如何进行这些转换?

4

2 回答 2

5

看来你需要:

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

之后,您可以使用以下代码摆脱索引并用作“时间戳”对象:

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
于 2017-09-22T08:55:34.597 回答
3

只需将结果转换为字符串,并使用以下命令恢复它.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对象:

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 小时的差异。

于 2017-09-22T08:52:29.810 回答