Filter dataframe from a tuple

1

I have the following dataframe (df2)

      Nombrearchivo                         Numero        PosicionRegistro
20161020_113502_131221557378544949.jpg     208-13567             588
20161020_113448_131221555449704589.jpg     208-1356              588
20161020_113348_131221557962771773.jpg     208-567958-           588
TOMAS_131225713254987197.pdf               017-30402-            649

and the tuple contains (resultFileName)

[('20161020_113502_131221557378544949.jpg', 85, 17),
('20161020_113352_131221557853238556.jpg', 82, 21), 
('20161020_113422_131221557754328771.jpg', 79, 20), 
('20161020_113448_131221555449704589.jpg', 76, 18),
('20161020_113437_131221557662296937.jpg', 76, 19), 
('20161020_113348_131221557962771773.jpg', 76, 22)] 

I need to show the dataframe data where the file name matches the tuple data, try several methods that I was reviewing with lamba but in all I could not advance anything an example of what I get to try is

resultNombreArchivo = process.extract(inputNombreArchivo,InputDataSet["nombreArchivo"],limit=6,scorer=fuzz.ratio)

df2 = pd.DataFrame(InputDataSet)

print(df2[df2["nombreArchivo"].apply(lambda x: resultNombreArchivo[0][0] in x)])
    
asked by Sebastian 14.06.2018 в 21:10
source

1 answer

1

It should work as I mentioned in my comment:

>>> data = [
...   {'NombreArchivo': '20161020_113502_131221557378544949.jpg', 'Numero': '208-13567', 'PosicionRegistro': 588},
...   {'NombreArchivo': '20161020_113448_131221555449704589.jpg', 'Numero': '208-1356', 'PosicionRegistro': 588},
...   {'NombreArchivo': '20161020_113348_131221557962771773.jpg', 'Numero': '208-567958-', 'PosicionRegistro': 588},
...   {'NombreArchivo': 'TOMAS_131225713254987197.pdf', 'Numero': '017-30402-', 'PosicionRegistro': 649},
... ]
>>> df = pd.DataFrame(data)
>>> resultNombreArchivo = [                                                   
...   ('20161020_113502_131221557378544949.jpg', 85, 17),
...   ('20161020_113352_131221557853238556.jpg', 82, 21), 
...   ('20161020_113422_131221557754328771.jpg', 79, 20), 
...   ('20161020_113448_131221555449704589.jpg', 76, 18),
...   ('20161020_113437_131221557662296937.jpg', 76, 19), 
...   ('20161020_113348_131221557962771773.jpg', 76, 22) 
... ]

Using apply :

>>> df['NombreArchivo']
0    20161020_113502_131221557378544949.jpg
1    20161020_113448_131221555449704589.jpg
2    20161020_113348_131221557962771773.jpg
3              TOMAS_131225713254987197.pdf
Name: Nombrearchivo, dtype: object
>>> df['NombreArchivo'].apply(lambda x: resultNombreArchivo[0][0] in x)
0     True
1    False
2    False
3    False
>>> print(df[df['NombreArchivo'].apply(lambda x: resultNombreArchivo[0][0] in x)])
                            NombreArchivo     Numero  PosicionRegistro
0  20161020_113502_131221557378544949.jpg  208-13567               588

Update

If you want to filter your DataFrame to know which of them contain files that are inside the tuples, you can use isin :

>>> nombres_archivos = [tupla[0] for tupla in resultNombreArchivo]
>>> nombres_archivos
['20161020_113502_131221557378544949.jpg', '20161020_113352_131221557853238556.jpg', '20161020_113422_131221557754328771.jpg', '20161020_113448_131221555449704589.jpg', '20161020_113437_131221557662296937.jpg', '20161020_113348_131221557962771773.jpg']
>>> df['NombreArchivo'].isin(nombres_archivos)
0     True
1     True
2     True
3    False
Name: NombreArchivo, dtype: bool
>>> print(df[df['NombreArchivo'].isin(nombres_archivos)])
                            NombreArchivo       Numero  PosicionRegistro
0  20161020_113502_131221557378544949.jpg    208-13567               588
1  20161020_113448_131221555449704589.jpg     208-1356               588
2  20161020_113348_131221557962771773.jpg  208-567958-               588
    
answered by 14.06.2018 / 21:51
source