Экземпляры списка Python Boto3 в окне данных - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь перечислить свои экземпляры EC2 в таблице с Boto3.

instances = ec2.instances.filter(
    Filters=[{'Name': 'instance-state-name', 'Values': ['running']}])
instance_count = sum(1 for _ in instances.all())
RunningInstances = []
for instance in instances:
    id = instance.id
    name = self.get_name_tag(instance)
    type = instance.instance_type
    mylist = {"name":name,"id":id,"type":type}
    RunningInstances.append(mylist.copy())
import numpy as np
import pandas as pd
table = pd.DataFrame.from_dict(RunningInstances)
print(table)

Это создает таблицу - это здорово! Моя проблема заключается в том, что столбцы переполняются в другую строку, даже если столбцы могут поместиться в текущем окне:

                 id                                           name  \
0            i-56b243ge                                       My Really Long Name for my Instance
1            i-89b789ga                                       My 2nd Really Long Name for my Instance

                 type
0            t2-micro
1            t2-small

Я только что узнал, что Панды существуют сегодня, поэтому я не совсем освоил стиль. Имейте в виду, что заголовок столбца имени находится справа от значений имени - я просто не могу поместить его туда из-за форматирования стека. Как я могу получить все Dataframe / таблицы в одном представлении?

1 Ответ

0 голосов
/ 25 мая 2018

Добро пожаловать в мир Pandas, вам понравится, как он выполняет операции с кадрами данных, не ожидая, что вы будете перебирать значения.Я немного изменил ваш разбор, чтобы продемонстрировать некоторые его возможности!

import boto3
import pandas as pd
client=boto3.client('ec2')
response = client.describe_instances()
df=pd.io.json.json_normalize(
    pd.DataFrame(
        pd.DataFrame(
            response['Reservations']
        )\
        .apply(lambda r: r.str[0])\. # Get only the first element of the list
        .Instances\
        .values
        )[0]
    )[['ImageId','InstanceType','Tags']]
df['Name']=df.Tags.apply(lambda r: r[0]['Value']) # Get the name from the tags dict
df.drop(['Tags'], axis=1, inplace=True)
df

Даст вам:

    ImageId InstanceType Name
0   ami-123 t2.2xlarge   name1
1   ami-234 t2.large     name2
2   ami-345 m5.12xlarge  name3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...