Как сравнить два csv-файла в python3?

#python #csv

#python #csv

Вопрос:

Я хочу сравнить file1.csv столбец A с file2.csv столбец B и file1.csv столбец B с file2.csv столбец c, а также file1.csv столбец c с file2.csv столбец A

 import pandas as pd
df = pd.read_csv('table.csv', delimiter=',')
list1 = [list(row) for row in df.values]
#print(list_of_rows)

df1 = pd.read_csv('output_csv_file.csv', delimiter=',')
list2 = [list(row) for row in df1.values]
#print(list_of_rows1,"********************8")

new_items = []
for item in list2:
   if not any(x[1] == item[1] for x in list1):
       if not any(x[2] != item[2] for x in list1):       
           new_items.append(item)
  

Примеры входных файлов и ожидаемый выходной файл, который я добавил, пожалуйста, направьте меня

 file1                                                       

col_A    clo_B                    clo_C          col_D            

12345    2020-09-08 09:10:20      10.100.90.89   15



file2                                                       

col_A               clo_B          clo_C                      col_D   col_E    col_F     

10.100.90.89        21301          2020-09-08 09:10:20         15      1       6

10.100.90.89        12345          2020-09-08 09:10:20         15      1       6

10.100.90.89        12345          2020-06-08 09:10:20         15      1       6

Output:

col_A               clo_B          clo_C                      col_D   col_E    col_F     

10.100.90.89        21301          2020-09-08 09:10:20         15      1       6

10.100.90.89        12345          2020-06-08 09:10:20         15      1       6
  

Комментарии:

1. Можете ли вы отредактировать свой вопрос и поместить туда образцы данных и ожидаемый результат?

2. я отредактировал, пожалуйста, проверьте @AndrejKesely

3. Можете ли вы поместить туда образец содержимого CSV-файлов и ожидаемый результат?

4. я добавил, пожалуйста, проверьте и помогите мне @AndrejKesely

5. Можете ли вы объяснить правила, почему конечный результат имеет две строки?

Ответ №1:

Если у вас есть фреймы данных:

 list1 = [
    ['12345', '2020-09-08 09:10:20', '10.100.90.89', '15']
]

list2 = [
    ['10.100.90.89','21301','2020-09-08 09:10:20','15','1','6'],
    ['10.100.90.89','12345','2020-09-08 09:10:20','15','1','6'],
    ['10.100.90.89','12345','2020-06-08 09:10:20','15','1','6'],
]

df1 = pd.DataFrame(list1, columns=['col_A','col_B','col_C','col_D'])
df2 = pd.DataFrame(list2, columns=['col_A','col_B','col_C','col_D','col_E','col_F'])

print(df1)
print(df2)
  

    col_A                col_B         col_C col_D
0  12345  2020-09-08 09:10:20  10.100.90.89    15
          col_A  col_B                col_C col_D col_E col_F
0  10.100.90.89  21301  2020-09-08 09:10:20    15     1     6
1  10.100.90.89  12345  2020-09-08 09:10:20    15     1     6
2  10.100.90.89  12345  2020-06-08 09:10:20    15     1     6
  

Затем:

 tmp = pd.DataFrame(df1[['col_C', 'col_A', 'col_B', 'col_D']])
tmp.columns = ['col_A','col_B','col_C','col_D']

out = df2.merge(tmp, on=['col_A', 'col_B', 'col_C', 'col_D'], how='left', indicator=True)
out = out[out['_merge'] == 'left_only'].drop(columns='_merge')
print(out)
  

Удалит дубликаты:

           col_A  col_B                col_C col_D col_E col_F
0  10.100.90.89  21301  2020-09-08 09:10:20    15     1     6
2  10.100.90.89  12345  2020-06-08 09:10:20    15     1     6
  

Комментарии:

1. обязательно ли указывать имена столбцов?

2. @pythonnewbie Согласно вашему примеру, csv-файл 1 имеет другой порядок столбцов, чем csv-файл 2, поэтому я соответствующим образом переупорядочил их