Определение каждого списка в цикле FOR в Python

#python

Вопрос:

Я отфильтровал некоторые данные, которые использую для некоторого анализа, и отсортировал тикеры в нужные мне списки, но я не могу получить доступ к спискам вне цикла for?

 import pandas as pd

data = pd.read_csv('https://datahub.io/core/s-and-p-500-companies/r/constituents.csv')
# Classify sectors
sectors = list(data.Sector)
sectors = set(sectors)

for i in sectors:
    i = data.loc[data['Sector'] == i]
    i = list(i.Symbol)
    print(i)
 

Я не могу понять, почему списки не могут вызываться из-за пределов цикла for, если я думал, что списки группируются правильно (как видно из печати i).

Большое спасибо за любую помощь.

Комментарии:

1. Ваш цикл ничего не производит. Вы перезаписываете i , затем перезаписываете его снова, а затем печатаете. Ничто не спасено.

2. Что именно вы пытаетесь сделать? Обычно это красный флаг, когда вы видите, что кто-то использует for цикл с фреймом данных.

3. Спасибо! Знаете ли вы, как лучше всего изменить, чтобы сохранить каждый список?

4. Я не понимал, что использование цикла for-плохая практика, что бы вы посоветовали, чтобы это было лучше? Я в основном пытаюсь создать списки для каждого сектора биржевых тикеров, чтобы запустить программу обратного тестирования.

5. Это не обязательно «плохая практика», просто очень редко приходится сталкиваться с ситуацией, когда необходимо использовать for цикл над любым из встроенных методов Панды для обработки данных.

Ответ №1:

Это можно сделать полностью с помощью панд. Ниже приведен один из способов, которым это можно сделать:

 import pandas as pd
from operator import attrgetter

df = pd.read_csv('https://datahub.io/core/s-and-p-500-companies/r/constituents.csv')

df1 = pd.DataFrame(df.groupby(df.Sector)['Symbol'].apply(attrgetter('values')).values.tolist(), index=df.Sector.unique())
print(df1)
 

 0      1     2     3   ...    70    71    72    73
Industrials             ATVI  GOOGL  GOOG     T  ...  None  None  None  None
Health Care              AAP   AMZN  APTV   AZO  ...  None  None  None  None
Information Technology   ADM     MO  BF.B   CPB  ...  None  None  None  None
Communication Services   APA    BKR   COG   CVX  ...  None  None  None  None
Consumer Staples         AFL    ALL   AXP   AIG  ...  None  None  None  None
Consumer Discretionary   ABT   ABBV  ABMD     A  ...  None  None  None  None
Utilities                MMM    AOS   ALK  ALLE  ...   GWW   WAB    WM   XYL
Financials               ACN   ADBE   AMD  AKAM  ...    WU  XLNX  ZBRA  None
Materials                APD    ALB  AMCR   AVY  ...  None  None  None  None
Real Estate              ARE    AMT   AVB   BXP  ...  None  None  None  None
Energy                   AES    LNT   AEE   AEP  ...  None  None  None  None

[11 rows x 74 columns]
 

Комментарии:

1. Твой тон слегка снисходителен. Ваш ответ можно было бы улучшить, объяснив, почему правильнее использовать встроенные методы Pandas по for циклу.

2. Не хотел, чтобы это было снисходительно. Я отредактирую.