2016-04-01 30 views
0

當我做熊貓:時間戳版本0.18.0(帶有時區)

df[ts_col] 

我看到這個輸出

Series: 0 2015-02-04 23:21:15-06:00 
Name: Timestamp, dtype: datetime64[ns, US/Central] 

當我做

df[ts_col].apply(lambda x: x) 

我看到

Series: 0 2015-02-05 05:21:15 
Name: Timestamp, dtype: datetime64[ns] 

當我做

df[ts_col].apply(lambda x: str(x)) 

我看到

Series: 0 2015-02-05 05:21:15 
Name: Timestamp, dtype: object 

這是沒有意義的。任何人都可以解釋這個具體而言,我感興趣的是如何從我的時間戳中提取日期2015-02-04

回答

1

這是一個已知的大熊貓的問題,看起來像它的幾乎固定的:

https://github.com/pydata/pandas/issues/11800

https://github.com/pydata/pandas/issues/11757

現在,你也許可以解決它的東西,如最後一個例子:

In [182]: df["d"] 
Out[182]: 
0 2016-03-31 20:00:00-04:00 
1 2016-03-31 21:00:00-04:00 
2 2016-03-31 22:00:00-04:00 
3 2016-03-31 23:00:00-04:00 
4 2016-04-01 00:00:00-04:00 
5 2016-04-01 01:00:00-04:00 
Name: d, dtype: datetime64[ns, US/Eastern] 

In [183]: df["d"].apply(lambda x: str(x)) 
Out[183]: 
0 2016-04-01 00:00:00 
1 2016-04-01 01:00:00 
2 2016-04-01 02:00:00 
3 2016-04-01 03:00:00 
4 2016-04-01 04:00:00 
5 2016-04-01 05:00:00 
Name: d, dtype: object 

In [184]: df["d"].astype(pd.datetime).apply(lambda x: x.date()) 
Out[184]: 
0 2016-03-31 
1 2016-03-31 
2 2016-03-31 
3 2016-03-31 
4 2016-04-01 
5 2016-04-01 
Name: d, dtype: object 
+0

不起作用。一旦你得到了df [「d」],這是一個字符串,對應於2016年4月1日的時間戳,所有時區信息已經丟失,無法恢復2016-03-31。 –

+0

我不遵循你所說的話。在我上面給出的例子中,'Out [183]​​'顯示的是你得到的同樣錯誤的結果,但'Out [184]'給你非時區感知日期,而不先轉換爲UTC。 'df [「d」]。astype(pd.datetime).apply(lambda x:x.date())。ix [0]'然後返回'datetime.date(2016,3,31)',而不是一個字符串。 –