簡體   English   中英

從 csv 文件讀取時,Pandas drop_duplicates() 在向 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM