【问题标题】:find different values in two dataframes exported to and imported from the same CSV在导出到同一个 CSV 和从同一个 CSV 导入的两个数据框中找到不同的值
【发布时间】:2021-11-07 03:40:37
【问题描述】:

我有一个df_finalpandas v1.3.4 数据框并将其导出到 CSV 文件,因此我无需在每次进行分析时都重复数据框构建步骤。 df_final 将是一个 13000 x 91 数据帧,但我首先在较小的 689x91 数据帧上测试该过程。

我想确认通过读取df_final CSV 生成的df_final_csv 数据帧与df_final 数据帧相同。根据下面的情况,它们看起来是不同的。但是,我不确定如何。我复制了一些堆栈溢出代码(下面,改编自here),但其他一些解决方案(eg)不起作用,因为我的df_final 中有列表对象。如何找到导致问题的值?

如果有任何其他信息有帮助,请告诉我。

#689 rows x 91 columns
df_final = pd.DataFrame.from_dict(results)                                
print (f'NaN are present:  {df_final.isnull().values.any()}')# False

#export to csv
df_final.to_csv('integrated_df.csv')

#read in csv
df_final_csv = pd.read_csv('integrated_df.csv', index_col = 0)
print (f' NaN are present:  {df_final_csv .isnull().values.any()}')# False')
print (f'imported df is same as exported df:  {df_final.equals(df_final_csv)}')#False 

#try and find discrepancies (--> empty df)     
different_values = df_final_csv [~df_final_csv .isin(df_final)].dropna() #empty df with only column headers 

干杯!

【问题讨论】:

  • pd.read_csv 可能无法恢复相同的数据类型。所以你的整数和浮点数可能仍然显示为字符串。在进行任何比较之前,您必须调用 .astype 并设置 df_final_csv 的类型。此外,您可能需要考虑使用 pickle 来保留类型。 Here's 一个可以帮助您确定泡菜是否合适的答案。
  • 也许有一些特殊字符被 CSV 搞砸了。尝试写入 .pkl 文件,您将获得 100% 相同的数据。 import pickle; pickle.dump(df, open("df.pkl", 'wb')); # then read it ; df_new = pickle.load(open("df.pkl", 'rb'))
  • 您好,感谢您的回复。两者都很有用,而且您的链接确实相关,但 Amir 的代码是我用来解决实际问题的代码,所以 @Amir saleem 如果您将您的评论作为答案,我会接受它(因为我很确定我不能两者都接受)。再次感谢你们!
  • 谢谢@TimKirkwood,我在答案中发布了它

标签: python pandas dataframe csv comparison


【解决方案1】:

也许有一些特殊字符被 CSV 搞砸了。尝试写入 .pkl 文件,您将获得 100% 相同的数据。

import pickle
# write into pickle file
pickle.dump(df, open("df.pkl", 'wb'))

# then read it
df_new = pickle.load(open("df.pkl", 'rb'))

【讨论】:

    猜你喜欢
    • 2022-01-03
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 2018-01-26
    • 1970-01-01
    • 2020-12-29
    • 2019-01-17
    • 1970-01-01
    相关资源
    最近更新 更多