簡體   English   中英

在Pandas數據框中添加列時出現NaT錯誤

[英]NaT error when adding column in Pandas dataframe

我試圖在python中創建日期的數據框。 我使用日期作為索引:

aDates.head(5)
Out[114]: 
0   2009-12-31
1   2010-01-01
2   2010-01-04
3   2010-01-05
4   2010-01-06
Name: Date, dtype: datetime64[ns]

然后,我創建一個空的數據框:

dfAll_dates = pd.DataFrame(index = aDates)

然后,我得到了一個函數,該函數創建一個熊貓系列的日期,試圖將其添加為列,但是為了方便重現,我們假設我們添加了與索引相同的系列:

dfAll_dates['my_added_column'] = aDates

但這導致:

dfAll_dates.head(5)

Out[120]: 
           my_added_column
Date                      
2009-12-31             NaT
2010-01-01             NaT
2010-01-04             NaT
2010-01-05             NaT
2010-01-06             NaT

我試圖在aDates上使用.totimestamp將日期轉換為時間戳,但這並不能解決問題(然后,我的綁定方法為Series.to_timestamp為0),因為定義中沒有類型,所以我看不到為什么無論如何我都要轉換。

您能幫上忙嗎?

有一個問題, SeriesDataFrame有不同的indexes ,因此數據不對齊並獲得NaN

一個可能的解決方案是轉換值aDatesnumpy arrayvalues

dfAll_dates = pd.DataFrame(index = aDates)
dfAll_dates['my_added_column'] = aDates.values
print (dfAll_dates)
           my_added_column
Date                      
2009-12-31      2009-12-31
2010-01-01      2010-01-01
2010-01-04      2010-01-04
2010-01-05      2010-01-05
2010-01-06      2010-01-06

或使用to_frame + set_index ,也需要重命名列:

d = {'Date':'my_added_column'}
df = aDates.to_frame().set_index('Date', drop=False).rename(columns=d)
print (df)
           my_added_column
Date                      
2009-12-31      2009-12-31
2010-01-01      2010-01-01
2010-01-04      2010-01-04
2010-01-05      2010-01-05
2010-01-06      2010-01-06

或者將DataFrame構造函數與dict用於新列:

dfAll_dates = pd.DataFrame({'my_added_column':aDates.values}, index = aDates)
print (dfAll_dates)
           my_added_column
Date                      
2009-12-31      2009-12-31
2010-01-01      2010-01-01
2010-01-04      2010-01-04
2010-01-05      2010-01-05
2010-01-06      2010-01-06

另一種方法是使用pd.Index.to_series方法創建一個序列,其中值采用索引中的內容,而索引保持不變。

dfAll_dates['my_added_column'] = dfAll_dates.index.to_series()

那會照顧到索引對齊。 但是,您甚至不需要這樣做。 正如@jezrael所示,如果我們消除傳遞一個系列對象而只傳遞一個數組,那么pandas將不會嘗試對齊不存在的索引。 我們可以通過直接引用索引來完成同一件事

dfAll_dates['my_added_column'] = dfAll_dates.index

在任一情況下

dfAll_dates

           my_added_column
2009-12-31      2009-12-31
2010-01-01      2010-01-01
2010-01-04      2010-01-04
2010-01-05      2010-01-05
2010-01-06      2010-01-06

在這兩種情況下,我們都不再需要跟蹤aDates而只需要引用dfAll_dates已經存在的dfAll_dates

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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