【发布时间】: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