Concat умножает кадры данных в списке - PullRequest
0 голосов
/ 17 мая 2019

У меня есть несколько фреймов данных в списке, полученном после использования np.array_split, и я хочу объединить некоторые из них в один фрейм данных.В этом примере я хочу объединить 3 кадра данных, содержащихся в b (все, кроме 2-го, который является элементом 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и затем используйте addnd через цикл для элементов в 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 три раза один и тот же кадр данных со всеми строками, и я просто получаю первый из них.Тем не менее, в моем реальном случае, когда у меня есть большие наборы данных, три раза одинаковое привело бы к гораздо большему времени вычислений.

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

Ответы [ 2 ]

1 голос
/ 17 мая 2019

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

pd.concat(b, ignore_index=True)

output

    country gdp iso
0   a   1   x
1   c   3   z
2   d   4   w
1 голос
/ 17 мая 2019

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...