2016-07-07 35 views
-1

我正在追蹤我的previous question合併/連接CSV導入的數據框並刪除重複項

已經整理了一個循環來導入CSV,連接數據並刪除重複項。

files = glob.glob('./A08_csv/A08_B1_T*.csv') 
dfs = [pd.read_csv(fp, index_col=[0], parse_dates=[0], dayfirst=True) for fp in files] 
df = pd.concat(dfs) 

df_purged = df.drop_duplicates(inplace=True) 
print df_purged 

然而df.drop_duplicates(就地= TRUE)不工作(當然,我失去了一些東西),並打印返回一個空。我如何指定通過索引檢查重複項?添加列名似乎不起作用。

此外,我怎樣才能將這個循環轉換成一個公式,所以我可以將這個遞歸輸入應用於csv,具有不同的文件名(即可以用於A08_B1_T * .csv(臥室)和A08_KI_T * .csv(廚房)等)?

回答

1

你明白了inplace = True選項?

如果你這樣做inplace,這意味着你將修改df,所以不要將值設置爲df_purged

您在這裏有兩個解決方案:要麼你要保持「未淨化的」數據框中,你做的事:

df_purged = df.drop_duplicates() 

要麼你不關心保持它和你做:

df.drop_duplicates(inplace = True) 

您的結果數據框的第一個選項將是df_purged,但第二個選項將是df,因爲您執行了inplace,所以將被清除。

話雖這麼說,如果你想清除你的索引,如果你不需要保留它,你可以reset_index然後drop_duplicates這樣的:

df_purged = df.reset_index().drop_duplicates(['index']).drop('index',1) 

如果你需要保持指數(模的下降線):

df_purged = df.reset_index().drop_duplicates(['index']).set_index('index') 
del df.index.name 

(請注意,再次刪除索引名稱只是這裏美學)

1

這會有幫助嗎?

df.drop_duplicates(['col_name']) 

這裏是增加了指數的數據幀列中,在下降重複的解決方案,然後刪除新列:

df= df.reset_index().drop_duplicates(subset='Date', 'Time', keep='last').set_index(subset='Date', 'Time') 
+0

當然,它會(我試過),但proble m是我希望根據索引(日期和時間)識別重複項,並且不知道如何使用索引而不是'col_name'。 如果我輸入:'df.drop_duplicates(['Date Time'])'這是csv的列名,那麼我得到一個關鍵錯誤 – Andreuccio

+0

讓我知道如果編輯工作 – SerialDev

+0

Cmari,謝謝你。 現在我得到'KeyError:'index''。 – Andreuccio