Pandas для чтения файла csv и grep имен хостов из файла

#python-3.x #pandas

#python-3.x #pandas

Вопрос:

У меня есть CSV-файл, который я пытаюсь прочитать с помощью pandas на основе приведенного ниже кода.

Фрагмент кода:

 import pandas as pd
import os
data = pd.read_csv(input("Please input the CSV File Name: "), usecols=['Safe', 'Platform ID', 'Target system address']).dropna()
df = data[data['Platform ID'].str.startswith("TDS-Unix")][['Target system address', 'Safe' ]]
print(df)
  

Приведенный выше код я использую в качестве скрипта следующим образом:

 $ ./getcbk_srvlist_1_1.py
Please input the CSV File Name: InventoryReport.csv
                  Target system address                          Safe

3                                host01     TDS-PAR-DEFAULT-UNIX-ROOT
4                                host06          TDS-OT-SCM-UNIX-ROOT
5                                host09     TDS-PAR-DEFAULT-UNIX-ROOT
  

Выше приведен вид выходных данных, которые я получаю из моего фрейма данных, теперь я ищу способ, как своего рода grep использовать приведенные ниже имена хостов из host_list.txt файла.

Ниже приведен host_list.txt

 host01     
host02
host03
host04
host05
host06
host07
host08
host09
  

любые идеи будут очень полезны.

Желаемый:

 $./getcbk_srvlist_1_1.py | egrep "hosts044|hosts045"
InventoryReport.csv

52                     host044      TDS-OTT-DEFAULT-UNIX-Root
25238                  hosts045      TDS-DJ-DEFAULT-UNIX-ROOT
  

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

1. Вы хотите прочитать другой второй файл после того, как прочитаете первый csv?

2. @LudoSchmidt, я этого не понял.

3. @dubbbdan, мне нужно выполнить поиск имен хостов во фрейме данных (df) из файла host_list.txt .

4.вы могли бы сделать следующее, передать уникальные имена хостов в список, затем отфильтровать исходные данные с помощью .loc.isin data.loc[data['Target system address'].isin(mylist)]

5. @Datanovice, вот над чем работаем 🙂 , ты заметил это.

Ответ №1:

Я думаю, что после создания df вам нужно прочитать host_list.txt другой фрейм данных.

 df2 = pd.read_csv('host_list.txt',header=None)
df2.columns = ['host_list']


df2
Out[13]: 
  host_list
0    host01
1    host02
2    host03
3    host04
4    host05
5    host06
6    host07
7    host08
8    host09
  

Если затем вы хотите создать подмножество, df основанное на хостах, общих с df2 , вы могли бы использовать pandas.DataFrame.isin

 df = df[df['Target system address'].isin(df2.host_list.unique())]
  

Который возвращает:

   Target system address                       Safe
0                host01  TDS-PAR-DEFAULT-UNIX-ROOT
1                host06       TDS-OT-SCM-UNIX-ROOT
2                host09  TDS-PAR-DEFAULT-UNIX-ROOT