Хобрук: Ваш путь к мастерству в программировании

Concat умножает кадры данных в списке

У меня есть несколько фреймов данных в списке, полученных после использования np.array_split, и я хочу объединить некоторые из них в один фрейм данных. В этом примере я хочу объединить 3 кадра данных, содержащихся в b (все, кроме второго, который является элементом b[1] в списке):

df = pd.DataFrame({'country':['a','b','c','d'],
  'gdp':[1,2,3,4],
  'iso':['x','y','z','w']})

a = np.array_split(df,4)
i = 1
b = a[:i]+a[i+1:]

desired_final_df = pd.DataFrame({'country':['a','c','d'],
  'gdp':[1,3,4],
  'iso':['x','z','w']})

Я попытался создать пустой df, а затем использовать добавление через цикл для элементов в b, но без полного успеха:

CV = pd.DataFrame()
CV = [CV.append[(b[i])] for i in b] #try1
CV = [CV.append(b[i]) for i in b] #try2
CV = pd.DataFrame([CV.append[(b[i])] for i in b]) #try3

for i in b:
 CV.append(b) #try4

Я пришел к решению, которое работает, но неэффективно:

CV = pd.DataFrame()
CV = [CV.append(b) for i in b][0]

В этом случае я получаю в CV три раза один и тот же кадр данных со всеми строками, и я просто получаю первую из них. Однако в моем реальном случае, когда у меня есть большие наборы данных, три раза одно и то же приведет к гораздо большему времени вычислений.

Как я мог сделать это без повторения операций?


  • Пожалуйста, приведите пример результата, который вы хотите получить. 17.05.2019
  • @sentence сделанный 17.05.2019

Ответы:


1

Чтобы объединить несколько DF, сбросив индекс, используйте pandas.concat:

pd.concat(b, ignore_index=True)

вывод

    country gdp iso
0   a   1   x
1   c   3   z
2   d   4   w
17.05.2019

2

Согласно документам, DataFrame.append не работает на месте, как списки. Вместо этого возвращается результирующий объект DataFrame. Поймать этот объект должно быть достаточно для того, что вам нужно:

df = pd.DataFrame()
for next_df in list_of_dfs:
    df = df.append(next_df)

Вы можете использовать аргумент ключевого слова ignore_index=True в вызове append, чтобы индексы стали непрерывными, а не начинались с 0 для каждого добавленного кадра данных (при условии, что индекс всех кадров данных в списке начинается с 0).

17.05.2019
Новые материалы

Аргументы прогрессивного улучшения почти всегда упускают суть
В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

Введение в Джанго Фреймворк
Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

стройный-i18следующий
Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..

Обзор 20 основных и современных методов работы с массивами в JavaScript
Вы знаете их всех? В этом коротком посте я покажу сводку методов, доступных в JavaScript для работы с массивами. Я надеюсь, что вы найдете это полезным! В конце поста вы найдете ссылку на..

Да, но я чувствую необходимость указать, что это или не единственные два.
Да, но я чувствую необходимость указать, что это или не единственные два. Обучение с подкреплением (в качестве примера) также является важным.