Вы можете использовать ^[^*]*\*[^*]*$
для сопоставления строк с одной звездочкой. [^*]*
соответствует 0 или более символам, которые не являются литералами *
, за которыми следует литерал *
, за которым следует снова [^*]*
, закрепленный на обоих концах.
>>> data = [['Tom', 'M', 10], ['Nick', 'M', 15], ['Ann', 'F', 14]]
>>> df = pd.DataFrame(data, columns=['Name*', 'Gender**', 'Age'])
>>> df
Name* Gender** Age
0 Tom M 10
1 Nick M 15
2 Ann F 14
>>> df.filter(regex=r"^[^*]*\*[^*]*$")
Name*
0 Tom
1 Nick
2 Ann
Хотя это очень буквальная интерпретация вашего запроса, \w\*$
может быть достаточно точным для вашего варианта использования, как указывает Ник в комментариях (хотя имейте в виду, он будет соответствовать примерно "*foo*"
).
Другой вариант может быть ^[^*]*\*$
, что совпадает с моим исходным предложением, но со звездочкой только в конце строки.