![](/img/trans.png)
[英]Python pandas format datetime.datetime objects that are added to list
[英]Python Pandas: Overwriting an Index with a list of datetime objects
我在標題中有這樣的帶有時間戳的輸入CSV(形成列的時間戳數為幾千):
頭1,標題2,header3; header4; header5; 2013-12-30CET00:00:00; 2013-12-30CET00:01:00; ...; 2014-00-01CET00:00:00
在Pandas 0.12中,我能夠做到這一點,將字符串時間戳轉換為日期時間對象。 以下代碼剝離了時間戳字符串( translate()
)中的'CEST',將其讀取為日期時間( strptime()
),然后將其本地化為正確的時區( localize()
)[這種方法的原因是因為至少在我使用的版本中,CEST未被認為是時區]。
DF = pd.read_csv('some_csv.csv',sep=';')
transtable = string.maketrans(string.uppercase,' '*len(string.uppercase))
tz = pytz.country_timezones('nl')[0]
timestamps = DF.columns[5:]
timestamps = map(lambda x:x.translate(transtable), timestamps)
timestamps = map(lambda x:datetime.datetime.strptime(x, '%Y-%m-%d %H:%M:%S'), timestamps)
timestamps = map(lambda x: pytz.timezone(tz).localize(x), timestamps)
DF.columns[5:] = timestamps
但是,我的下游代碼要求我在0.16上運行pandas 0.16,但是在上述代碼片段的最后一行中,使用上述代碼會出現此錯誤:
*** TypeError:索引不支持可變操作
我正在尋找一種用datetime對象覆蓋索引的方法。 使用方法to_datetime()
對我不起作用,返回:
*** ValueError:未知的字符串格式
我有一些后續代碼可以復制然后刪除該數據幀中的數據的前幾列(所有的'header1; header2,header3'僅保留時間戳。其目的是進行轉置,並根據時間戳進行索引。
所以,我的問題是:
或者:如何用日期時間覆蓋一系列列名,以便我可以傳遞一組預先安排的時間戳,熊貓可以在隨后的代碼中將它們識別為時間戳(在pandas v0.16中),或者:任何其他達到相同效果的建議。
我已經研究過set_index()
, replace()
, to_datetime()
和reindex()
以及其他一些方法,但似乎無法實現這種覆蓋。 希望這很容易做到,而我只是想念一些東西。
TIA
我最終通過以下方法解決了這個問題:
問題是我有數千個帶有時間戳的列標題,而我不能直接解析為datetime對象。
因此,為了合並這些時間戳記對象,我添加了一個名為“ Time”的新列,然后在其中添加了datetime對象,然后將索引設置為新列(我省略了清除其他行的代碼頭數據,通過drop()
方法:
DF = DF.transpose()
DF['Time'] = timestamps
DF = DF.set_index('Time')
簡介:如果您的標頭中有一個帶有一組時間戳的CSV文件,則無法解析; 一種解決方法是分別解析它們,將新的Time列中包含正確的datetime對象,然后根據新列set_index()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.