example.csv
).
STRING_COL,INT_1,INT_2,FLOAT,INT_3
Hello,9,65151651,3234.54848,7832
This is a string,2,5484651,34.234,-999
Another,2,62189548,51.51658,-999
Test,2,2131514,5.2156,-999
Ham,9,6546548,2.15,-999
String,9,3216546,2.15468,-999
因此,我编写了一个与此类似的代码来逐单元格比较值:
import pandas as pd
df = pd.read_csv(
'example.csv', delimiter=',', comment='#', skip_blank_lines=True,
verbose=False, engine='python', dtype=str
)
df = df.apply(lambda x: pd.to_numeric(x, errors='ignore', downcast='integer'))
df_2 = pd.read_csv(
'example_2.csv', delimiter=',', comment='#', skip_blank_lines=True, # file with small changes
verbose=False, engine='python', dtype=str
)
df_2 = df_2.apply(lambda x: pd.to_numeric(x, errors='ignore', downcast='integer'))
for i in list(df.index):
for column in list(df.columns):
old = df.loc[i, column]
new = df_2.loc[i, column]
if old != new:
print('DIFFERENT VALUE >> INDEX: {} | OLD: {} | NEW: {}'.format(i, old, new))
如果你用这个小CSV文件运行这个例子,我很肯定它会运行得很好。但是有了一个巨大的CSV文件,一些奇怪的事情正在发生。我不明白为什么有时许多值会被截断为以下值:
1.6440000000000001 >> original value 1.644
7.7189999999999985 >> original value 7.7189
如果我比较它们,就会发现它们是不同的,这是不正确的,因为值是相同的。发生了什么事?有办法解决这个问题吗?有没有更好的方法将值与数据帧进行比较?
注意:也许我在我的原始代码的其他部分做了什么错误,但我认为我已经写了最重要和相关的。
注2:我考虑到
!=
操作员不能很好地与
NaN
np.isnan
以检查此更改。
更新
. 我不需要比较和说“是的,它是平等的”和“不,它是不平等的”。我需要检索每个单元格都有变化的值。