![](/img/trans.png)
[英]'subset' not working for drop_duplicates pandas dataframe
[英]Pandas drop_duplicates() not working after add a row to DataFrame when read from a csv file
我的代碼如下:
indexing_file_path = 'indexing.csv'
if not os.path.exists(indexing_file_path):
df = pd.DataFrame([['1111', '20200101', '20200101'],
['1112', '20200101', '20200101'],
['1113', '20200101', '20200101']],
columns = ['nname', 'nstart', 'nend'])
else:
df = pd.read_csv(indexing_file_path, header = 0)
print(df)
df.loc[len(df)] = ['1113', '20200202', '20200303']
# append() method not working either
print(df)
df.drop_duplicates('nname', keep = 'last', inplace = True)
print(df)
df.to_csv(indexing_file_path, index = False)
我想在這個文件中保持nname
列的唯一性。
當代碼第一次運行時,它會正確地將記錄保存到 csv 文件中,盡管1113
不是唯一的。
當代碼第二次運行時,它會將兩個1113
行保存到 csv 文件中,因為 DataFrame 是從 csv 文件創建的。
第三次運行后,它將始終保持兩個1113
行。
現在我有一個解決方案:
1、用兩個1113
行保存到csv文件。
2、再次讀取csv文件。
3、再次使用drop_duplicates
。
4、再次保存到csv文件。
為什么從 csv 文件創建的 DataFrame 如此不同?
如何一次將唯一行保存到 csv 文件?
我現在可以回答我的問題了。
原因是:
當從 csv 文件創建 DataFrame 時,pandas 將nname
列識別為 Z157DB7DF530069575E8ZD36
但是,當我再次添加1113
行時,pandas 將新行nname
識別為字符串,因此 integer 1113
不等於字符串1113
, Z3A43B4F88325D9405AZC 將保留兩個 row.EF02FA
解決方案是:
將 csv 文件讀取為字符串。
df = pd.read_csv(indexing_file_path, header=0, dtype=str)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.