Я впервые работаю с Pandas, поэтому я совершенно новичок в этом. Мне удалось сгруппировать список экземпляров для каждой учетной записи. Теперь, просматривая этот список, мне понадобится номер учетной записи (групповой ключ), чтобы иметь возможность что-то с ним сделать.
Это пример файла csv:
введите сюда описание изображения
#Using Pandas
df = pd.read_csv(os.path.join(__location__, 'instances.csv'))
df_group = df.groupby('account')['instance-id'].apply(list)
print(df_group.groups.keys())
for account in df_group:
#Initialize Prettytable
t = PrettyTable(['Instance ID', 'Instance Name', 'AMI-ID', 'AMI Name'])
#Initialize the EC2 client to assume role
sts = boto3.client('sts')
assume_role = sts.get_caller_identity().get('Arn').split('/')[1]
assumed_role=sts.assume_role( RoleArn = "arn:aws:iam::" + str(account[0]) + ":role/" + assume_role, RoleSessionName= 'Temporary_Session' )
Я читал о получении ключа с помощью groups.key()
, но кажется, что, когда он уже преобразован в список, сделать это таким образом невозможно, поскольку при попытке я получаю следующую ошибку.
line 9, in <module> print(df_group.groups.keys())
line 6299, in __getattr__return object.__getattribute__(self, name)
AttributeError: 'Series' object has no attribute 'groups'. Did you mean: 'groupby'?
В конце я пытаюсь получить номер учетной записи, чтобы иметь возможность использовать sts
, чтобы взять на себя другую роль.
Воспроизводимый ввод:
import pandas as pd
data = {
'account': [
'111111111111111', '111111111111111', '111111111111111', '111111111111111',
'111111111111111', '111111111111111', '222222222222222', '222222222222222',
'222222222222222', '222222222222222', '222222222222222', '222222222222222'
],
'instance-id': [
'i-124f1c3c401ijk3c4', 'i-124f1c3c401ijk3c4', 'i-124f1c3c401ijk3c4', 'i-124f1c3c401ijk3c7',
'i-124f1c3c401ijk3c8', 'i-124f1c3c401ijk3c9', 'i-124f1c3c401ijk3c176', 'i-124f1c3c401ijk3c177',
'i-124f1c3c401ijk3c178', 'i-124f1c3c401ijk3c179', 'i-124f1c3c401ijk3c180', 'i-124f1c3c401ijk3c182'
]
}
df = pd.DataFrame(data)
🤔 А знаете ли вы, что...
В Python есть инструменты для создания графиков и визуализации данных, такие как библиотеки Matplotlib и Seaborn.
Вам следует использовать Series.items:
for group, account in df_group.items():
print(f'{group=}')
print(account)
Или, может быть, лучше, не агрегируйте и не перебирайте объект GroupBy
:
for group, account in df.groupby('account')['instance-id']:
print(f'{group=}')
print(list(account))
Выход:
group='111111111111111'
['i-124f1c3c401ijk3c4', 'i-124f1c3c401ijk3c4', 'i-124f1c3c401ijk3c4', 'i-124f1c3c401ijk3c7', 'i-124f1c3c401ijk3c8', 'i-124f1c3c401ijk3c9']
group='222222222222222'
['i-124f1c3c401ijk3c176', 'i-124f1c3c401ijk3c177', 'i-124f1c3c401ijk3c178', 'i-124f1c3c401ijk3c179', 'i-124f1c3c401ijk3c180', 'i-124f1c3c401ijk3c182']