#python #pandas #dataframe
#python #панды #фрейм данных
Вопрос:
У меня есть следующий фрейм данных:
nutsgdp
Out[77]:
2010 2011 2012 ... 2016 2017 2018
NUTS_ID ...
AT 295896.60 310128.70 318653.00 ... 357299.70 370295.80 385711.90
AT1 131114.27 136271.77 139149.68 ... 155609.11 159879.39 166443.24
AT11 6698.37 7012.58 7365.43 ... 8353.78 8771.65 9005.49
AT111 738.53 784.29 791.16 ... 923.96 996.55 996.55
AT112 3843.03 4028.02 4313.17 ... 4923.69 5165.46 5165.46
... ... ... ... ... ... ...
UKN15 3762.30 3604.13 4228.35 ... 5391.50 5089.14 4203.36
UKN16 2169.86 2162.22 2452.28 ... 2801.88 2801.14 2730.28
UKZ 30761.26 33592.50 32090.74 ... 13343.86 12887.29 20225.66
UKZZ 30761.26 33592.50 32090.74 ... 13343.86 12887.29 20225.66
UKZZZ 30761.26 33592.50 32090.74 ... 13343.86 12887.29 20225.66
[1794 rows x 9 columns]
Я хотел бы удалить все строки, в которых индекс длиннее 2 символов и заканчивается на ‘Z’. Это означает, например, удаление 'UKZ'
'UKZZ'
и 'UKZZZ'
, но сохранение 'CZ'
. Каков наилучший способ сделать это? Заранее спасибо за вашу помощь.
Ответ №1:
Использовать Series.str.contains
с инвертированием маски по ~
и фильтрацией по boolean indexing
:
df = df[~df.index.str.contains('(.){2,}Z
Или использовать Series.str.endswith
с Series.str.len
:
df = df[~df.index.str.endswith('Z') | (df.index.str.len() <= 2)]
Или использовать
)]
Series.str.endswith
с Series.str.len
: