2016-07-07 65 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