Возврат различий между двумя столбцами в двух разных файлах в Excel с использованием python - PullRequest
1 голос
/ 05 февраля 2020

У меня есть два CSV-файла с общим столбцом с именем «Имя». Файл 2 будет постоянно обновляться и добавлять новые значения случайным образом в столбце. Как я могу написать скрипт для сравнения двух столбцов и найти различия, независимо от того, где новые значения помещены в файл 2.

Другие решения найдут различия только в том случае, если новые значения находятся в конце столбца не случайно в столбце.

Код, который я пробовал (выводит только новые значения внизу столбца, а не когда он находится в столбце случайным образом):

df1 = pd.read_csv('file1.csv')
df2 = pd.read_csv('file2.csv')

new_df = (df1[['Name']].merge(df2[['Name']],on='Name',how = 'outer',indicator = True)
                       .query("_merge != 'both'")
                       .drop('_merge',axis = 1))

new_df.to_csv('file4.csv')

File1 :

Name     
gfd454
3v4fd
th678iy

Файл2:

Name     
gfd454
fght45
3v4fd
th678iy

Выходные данные должны быть:

Name
fght45

Ответы [ 3 ]

1 голос
/ 06 февраля 2020
# df1 original dataframe of File_1 data
df1 = pd.DataFrame({'Name':[ 'gfd454' , '3v4fd', 'th678iy']})

# df2 dataframe of changing File_2 data
df2 = pd.DataFrame({'Name':[ 'gfd454' , 'abcde', 'fght45', '3v4fd', 'abcde' ,'th678iy', 'abcde']})

# Assuming df1 comprises distinct elements and doesn't change, and that
# df2 contains all elements of df1 and more (the new updates) 
# df2 may have duplicates like 'abcde'

# Drop duplicates in df2, if df1 has duplicates also drop it first
# ``keep = first`` : Drop duplicates except for the first occurrence.
df2.drop_duplicates(keep='first', inplace=True)
print(df2)

# pandas.concat adds elements of df2 to df1, even if it already exists in df1
df_concat = pd.concat([df1,df2], join='outer', ignore_index = True)
print(df_concat)

df_concat

# now drop the duplicates between df1, df2
df_diff = df_concat .drop_duplicates(keep=False)
print(df_diff)

df_diff

Теперь проблема в том, что вы должны убедитесь, что df1-df2 = {}, т.е. df1 является подмножеством df2

0 голосов
/ 05 февраля 2020

Если вы хотите проверить только один столбец, вы можете попробовать его, сравнив два списка:

list1=df1['Name'].tolist()
list2=df2['Name'].tolist()
s = set(list1)
diff = [x for x in list2 if x not in s]
0 голосов
/ 05 февраля 2020

Сделайте левое соединение, используя Файл 2 слева. После, извлеките строки NaN, которые не совпадают.

...