簡體   English   中英

Python Pandas:使用日期時間對象列表覆蓋索引

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM