#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. Не хотел, чтобы это было снисходительно. Я отредактирую.