Я делаю следующее в своем скрипте Python и хочу скрыть столбец индекса при печати фрейма данных. Поэтому я использовал .to_string(index = False), а затем использовал len(), чтобы узнать, равен ли он нулю или нет. Однако, когда я делаю to_string(), если фрейм данных пуст, len() не возвращает ноль. Если я печатаю procinject1, он говорит «Пустой фрейм данных». Любая помощь, чтобы исправить это, будет принята с благодарностью.
procinject1=dfmalfind[dfmalfind["Hexdump"].str.contains("MZ") == True].to_string(index = False)
if len(procinject1) == 0:
print(Fore.GREEN + "[✓]No MZ header detected in malfind preview output")
else:
print(Fore.RED + "[!]MZ header detected within malfind preview (Process Injection indicator)")
print(procinject1)

Это ожидаемое поведение в Pandas DataFrame.
В вашем случае procinject1 хранит строковое представление фрейма данных, которое не является пустым, даже если соответствующий фрейм данных пуст.
Например, проверьте приведенный ниже фрагмент кода, где я создаю пустой фрейм данных df и проверяю его строковое представление:
df = pd.DataFrame()
print(df.to_string(index = False))
print(df.to_string(index = True))
Для обоих случаев index = False и index = True вывод будет одинаковым, как показано ниже (и это ожидаемое поведение). Таким образом, ваш соответствующий len() всегда будет возвращать ненулевое значение.
Empty DataFrame
Columns: []
Index: []
Но если вы используете непустой фрейм данных, то выходные данные для случаев index = False и index = True будут отличаться, как показано ниже:
data = [{'A': 10, 'B': 20, 'C':30}, {'A':5, 'B': 10, 'C': 15}]
df = pd.DataFrame(data)
print(df.to_string(index = False))
print(df.to_string(index = True))
Тогда выходы для случаев index = False и index = True соответственно будут -
A B C
10 20 30
5 10 15
A B C
0 10 20 30
1 5 10 15
Поскольку панды по-разному обрабатывают пустые фреймы данных, для решения вашей проблемы вы должны сначала проверить, пуст ли ваш фреймворк данных, используя pandas.DataFrame.пустой.
Затем, если фрейм данных на самом деле не пуст, вы можете напечатать строковое представление этого фрейма данных, сохраняя при этом index = False, чтобы скрыть столбец индекса.