2015-06-23 67 views
0

我不確定發生了什麼,但是既不按日期排序也不drop_duplicates()適用於我的數據集。熊貓df.drop_duplicates()不會丟失重複項; df.sort()不排序

我連接兩個數據集,如下所示:

df = df.reset_index(drop=True) 
test_file = pd.read_csv('test_df.csv',index_col=0,encoding="utf_8") 
test_file = test_file.reset_index(drop=True) 

#compare csv with new results 
df3 = pd.concat([df,test_file]) 
df3 = df3.reset_index(drop=True) 
df3.groupby(list(df3.columns)).filter(lambda df3:df3.shape[0] == 1) 
df3 = df3.reset_index(drop=True) 
df3 = df3.sort('_date') 
df3 = df3.drop_duplicates() 

這似乎並沒有在所有刪除重複項 - 或按日期排序。

例如,在後面的文件:

462,,,,,,51.0,,,,,,,,,,,,,,,37.0,,,2015-06-22 00:00:00,General Election: Walker vs. Clinton,NBC News/Wall St. Jrnl 
463,,40.0,,,,48.0,,,,,,,,,,,,,,,,,,2015-06-22 00:00:00,General Election: Bush vs. Clinton,NBC News/Wall St. Jrnl 

朝頂部:

222,,,,,,51.0,,,,,,,,,,,,,,,37.0,,,2015-06-22 00:00:00,General Election: Walker vs. Clinton,NBC News/Wall St. Jrnl 
223,,40.0,,,,48.0,,,,,,,,,,,,,,,,,,2015-06-22 00:00:00,General Election: Bush vs. Clinton,NBC News/Wall St. Jrnl 

正如你可以看到這些行是除了指數相同。日期是一樣的,但日期排序不排序。它可能是一個類型問題?

列名:

,Biden,Bush,Carson,Chafee,Christie,Clinton,Cruz,Fiorina,Graham,Huckabee,Jindal,Kasich,O'Malley,Pataki,Paul,Perry,Rubio,Sanders,Santorum,Trump,Walker,Warren,Webb,_date,_poll,_pollname 

想法?

+2

有幾件事情:你需要你的'groupby'聲明分配給另一個'df3'變量和一個'as_index = FALSE'添加刪除冗餘'reset_index()' 。 'groupby()'返回一個groupby對象,並且不在數據框架上運行。就排序而言,'_date'列中的值實際上是日期時間對象嗎?一旦這些問題得到解決/確認,請嘗試再次執行'drop_duplicates()'。 – kennes

+0

這是否產生了你想要的結果? – kennes

+0

@bleh讓我試一試.. –

回答

1

如上所述,日期實際上是字符串日期而不是日期時間對象。

簡單的修復是:

df3['_date'] = pd.to_datetime(df3['_date']) 

drop_duplicates()也開始了這種變化之後才能正常工作。

最終代碼:

#compare csv with new results 
df3 = pd.concat([df,test_file]) 
df3 = df3.reset_index(drop=True) 
#remove unnecessary groupby method 
#df3 = df3.groupby(list(df3.columns), as_index=False)#.filter(lambda df3:df3.shape[0] > 1) 
df3 = df3.drop_duplicates(list(df3.columns)) 
df3['_date'] = pd.to_datetime(df3['_date']) 
df3 = df3.sort('_date') 
df3 = df3.drop_duplicates() 
df3 = df3.reset_index(drop=True)