Python Pandas: сравните два файла CSV и удалите строки из обоих файлов, сопоставив столбец

Нам нужно удалить строки из обоих файлов, если значение первого столбца отсутствует в другом файле.

Давайте рассмотрим два файла CSV:

file1.csv:
yrdi_391    111    1.11    1.0    1.1    111.0
yfyrn_9132  222    2.22    2.0    2.2    222.0
kdkfke_392  999    9.99    9.0    9.9    999.0
hfeisk_3    333    3.33    3.0    3.3    333.0

file2.csv:
yrdi_391    444    4.44    4.0    4.4    444.0
yfyrn_9132  555    5.55    5.0    5.5    555.0
hfeisk_3    666    6.66    6.0    6.6    666.0
fhedn_271   888    8.88    8.0    8.8    888.0

Теперь нам нужно удалить всю строку, начинающуюся с kdkfke_392, из file1.csv, поскольку ее там нет file2.csv.

С другой стороны, нам нужно удалить всю строку, начинающуюся с fhedn_271, поскольку ее нет в file1.csv.

Ожидаемый результат:

file1.csv:
yrdi_391    111    1.11    1.0    1.1    111.0
yfyrn_9132  222    2.22    2.0    2.2    222.0
hfeisk_3    333    3.33    3.0    3.3    333.0

file2.csv:
yrdi_391    444    4.44    4.0    4.4    444.0
yfyrn_9132  555    5.55    5.0    5.5    555.0
hfeisk_3    666    6.66    6.0    6.6    666.0

На данный момент строки в file1.csv и file2.csv не сортируются. При необходимости мы можем сначала выполнить сортировку, а затем применить удаление.

Манипуляции, связанные с Pandas CVS, предпочтительнее, так как в обоих файлах есть заголовки, и мы должны их сохранить.

Новичок в написании скриптов на Python!

Любая помощь будет принята с благодарностью!


person RandomCoder    schedule 13.11.2018    source источник
comment
Читайте про слияние в пандах ..   -  person Rahul Agarwal    schedule 13.11.2018
comment
@RahulAgarwal Я не хочу присоединяться к этим файлам. Их нужно обновлять, разделяя их.   -  person RandomCoder    schedule 13.11.2018


Ответы (1)


Вы можете использовать isin().

print (df)

            0    1     2    3    4      5
0    yrdi_391  111  1.11  1.0  1.1  111.0
1  yfyrn_9132  222  2.22  2.0  2.2  222.0
2  kdkfke_392  999  9.99  9.0  9.9  999.0
3    hfeisk_3  333  3.33  3.0  3.3  333.0

print (df1)

            0    1     2    3    4      5
0    yrdi_391  444  4.44  4.0  4.4  444.0
1  yfyrn_9132  555  5.55  5.0  5.5  555.0
2    hfeisk_3  666  6.66  6.0  6.6  666.0
3   fhedn_271  888  8.88  8.0  8.8  888.0

csv_df = df[df[0].isin(df1[0])]

print (csv_df)
            0    1     2    3    4      5
0    yrdi_391  111  1.11  1.0  1.1  111.0
1  yfyrn_9132  222  2.22  2.0  2.2  222.0
3    hfeisk_3  333  3.33  3.0  3.3  333.0

csv_df1 = df1[df1[0].isin(df[0])]

print (csv_df1)
            0    1     2    3    4      5
0    yrdi_391  444  4.44  4.0  4.4  444.0
1  yfyrn_9132  555  5.55  5.0  5.5  555.0
2    hfeisk_3  666  6.66  6.0  6.6  666.0

csv_df.to_csv('temp.csv', index=False)
csv_df1.to_csv('temp1.csv', index=False)
person Abhi    schedule 13.11.2018
comment
Даю пару исключений! - person RandomCoder; 13.11.2018
comment
Traceback (последний вызов последним): файл /python3.6/site-packages/pandas/core/indexes/base.py, строка 2525, в get_loc return self._engine.get_loc (key) Файл pandas / _libs / index.pyx , строка 117, в pandas._libs.index.IndexEngine.get_loc Файл pandas / _libs / index.pyx, строка 139, в pandas._libs.index.IndexEngine.get_loc Файл pandas / _libs / hashtable_class_helper.pxi, строка 1265, в pandas._helper.pxi, строка 1265, в pandas._libs.index.IndexEngine.get_loc ._libs.hashtable.PyObjectHashTable.get_item Файл pandas / _libs / hashtable_class_helper.pxi, строка 1273, в pandas._libs.hashtable.PyObjectHashTable.get_item KeyError: 0 и еще один - person RandomCoder; 13.11.2018
comment
@RandomCoder Вы должны использовать свое первое имя столбца, которое вы хотите проверить, вместо 0 чего-то вроде df[df[your col name].isin(df1[your col name])] - person Abhi; 13.11.2018