Это может звучать как сумасшедший способ хранения данных, но я работаю с разреженными данными, и в попытке сэкономить место, я создал фрейм данных, где один столбец представляет собой список диктов переменной длины (от 1 до болеедюжина диктов с тремя элементами каждый).Я пытаюсь получить доступ ко второму элементу в каждом dict и создать новый столбец только со списком этих вторых элементов.На самом деле я не могу вставить свои данные, однако могу привести пример, который близко приближает их.
Представьте, что у меня есть данные с характеристиками моих кошек, собак и хомяков, и у меня было 3 кошки, 1 собака и 1 хомяк, каждый с данными о цвете и длине меха.Я в основном пытаюсь получить доступ к списку конкретных атрибутов для каждого типа животных.Теперь код ниже работает просто отлично.Однако, если вы расширите его до более чем 22 000 строк, это ОЧЕНЬ невероятно медленно.Вероятно, это связано с циклом for.
df = pd.DataFrame({'name':['cats','dogs','hamsters'],'attributes':[[{'color':'white','fur':'short'},{'color':'black','fur':'long'},{'color':'gray','fur':'long'}],[{'color':'brown','fur':'short'}],[{'color':'brown','fur':'short'}]]})
df['colors']=''
for i in range(len(df)):
attributes = df.attributes.iloc[i]
df.loc[i,['colors']] = [list(map(lambda x: x['color'],attributes))]
df до:
name attributes
0 cats [{'color': 'white', 'fur': 'short'}, {'color':...
1 dogs [{'color': 'brown', 'fur': 'short'}]
2 hamsters [{'color': 'brown', 'fur': 'short'}]
df после:
name ... colors
0 cats ... [white, black, gray]
1 dogs ... [brown]
2 hamsters ... [brown]
Я ищу способускорить этот процесс, возможно, с помощью лямбда-функции?Не уверен, но почти всегда есть способ прервать цикл for, однако я просто не могу его увидеть.