我有一個有兩列和默認索引的熊貓數據框。第一列是一個字符串,第二列是日期。最重要的日期是NaN(儘管它應該是NaT)。這是一個熊貓錯誤與notnull()或我的一個根本的誤解(可能誤解)
index somestr date
0 ON NaN
1 1C 2014-06-11 00:00:00
2 2C 2014-07-09 00:00:00
3 3C 2014-08-13 00:00:00
4 4C 2014-09-10 00:00:00
5 5C 2014-10-08 00:00:00
6 6C 2014-11-12 00:00:00
7 7C 2014-12-10 00:00:00
8 8C 2015-01-14 00:00:00
9 9C 2015-02-11 00:00:00
10 10C 2015-03-11 00:00:00
11 11C 2015-04-08 00:00:00
12 12C 2015-05-13 00:00:00
調用此數據框df。
當我運行:
df[pd.notnull(df['date'])]
我想到的第一行消失。它沒有。 如果我通過設置刪除與字符串列:
df=df[['date']]
然後應用:
df[pd.notnull(df['date'])]
然後第一行與空不會消失。
另外,如果所有列都是數字/日期類型,那麼帶有null的行總是會消失。當出現帶有字符串的列時,會出現此問題。
肯定這是一個錯誤,對不對?我不確定別人是否能夠複製這個。 這是我Enthought冠的Windows(我不是UNIX/Linux的命令行噪音足夠聰明)
每傑夫下面的請求和unutbu: @ubuntu -
df.dtypes
somestr object
date object
dtype: object
另外:
type(df.iloc[0]['date'])
pandas.tslib.NaTType
在代碼中,此列被專門分配爲pd.NaT 我也不明白爲什麼NaN應該說NaT。當我用這個玩具幀I中所用的過濾工作得很好:
df=pd.DataFrame({'somestr' : ['aa', 'bb'], 'date' : [pd.NaT, dt.datetime(2014,4,15)]}, columns=['somestr', 'date'])
還應當注意,儘管上面的表有NaN的輸出,以下輸出納特:
df['date'][0]
NaT
另外:
pd.notnull(df['date'][0])
False
pd.notnull(df['date'][1])
True
但是....評估數組時,他們都回來了真 - 離奇......
np.all(pd.notnull(df['date']))
True
@Jeff - 這是0.12。我堅持這一點。該框架是通過連接使用psql從數據庫查詢中抓取的兩個不同框架創建的。日期和其他一些浮動列然後通過我做的計算加入。當然,我篩選了兩個有意義的列,直到我指出字符串值列導致問題。
************如何複製**********
import pandas as pd
import datetime as dt
print(pd.__version__)
# 0.12.0
df = pd.DataFrame({'somestr': ['aa', 'bb'], 'date': ['cc', 'dd']},
columns=['somestr', 'date'])
df['date'].iloc[0] = pd.NaT
df['date'].iloc[1] = pd.to_datetime(dt.datetime(2014, 4, 15))
print(df[pd.notnull(df['date'])])
# somestr date
# 0 aa NaN
# 1 bb 2014-04-15 00:00:00
df2 = df[['date']]
print(df2[pd.notnull(df2['date'])])
# date
# 1 2014-04-15 00:00:00
所以,這個數據幀原本所有的字符串項 - 那麼日期列被轉換爲頂部帶有NaT的日期 - 請注意,在表中它是NaN,但是當使用df.iloc [0] ['date']時,您會看到NaT。使用上面的代碼片斷,您可以看到,通過非null進行篩選與沒有somestr列進行篩選是非常奇怪的。再次 - 這是Pandas 0.12和NumPy 1.8的Windows Enthought Canopy。
爲了幫助我們複製錯誤,請發佈'df.dtypes'。 – unutbu
什麼版本的熊貓?看起來像一個相當古老的錯誤。你是如何創建這個框架的? – Jeff
@Jeff - 我已將信息添加到每個發佈指南的底部的OP。 – FinanceGuyThatCantCode