Pandas drop_duplicates() 在从 csv 文件读取时向 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 列识别为整数

但是,当我再次添加 1113 行时,pandas 将新行 nname 识别为字符串,因此整数 1113 不等于字符串 1113, pandas 将保留两行。

解决方法是:

将 csv 文件读取为字符串。

df = pd.read_csv(indexing_file_path, header=0, dtype=str)