Панды: как вставить новые данные из списка списков под существующими столбцами? - PullRequest
0 голосов
/ 08 февраля 2019

Итак, у меня есть пустой pandas фрейм данных, который я планирую добавить несколько раз, к которому я даю столбцы, с

dataframe = pd.DataFrame([], columns=['Author', 'Date', 'Text', 'Length', 'Favorites', 'Retweets'])

В конце концов, у меня есть данные в виде спискасписки (или массив массивов, если хотите), и вы хотите добавить все это в пустой фрейм данных под текущими столбцами.

Данные генерируются следующим образом (я собираю данные из твиттера, кстати))

input = np.array(list(zip([tweet.source for tweet in tweets],
                         [tweet.created_at for tweet in tweets], 
                         [tweet.text for tweet in tweets],
                         [len(tweet.text) for tweet in tweets],
                         [tweet.favorite_count for tweet in tweets],
                         [tweet.retweet_count for tweet in tweets])))

, что приводит к массиву, в котором каждому элементу соответствует один твит и вся информация о нем.

Если я попытаюсь dataframe.append(pd.DataFrame(input)), я получу следующий беспорядочный результат:

enter image description here

Как в этой ситуации эффективно добавить такие данные в мой фрейм данных?

Спасибо всем заранее.

1 Ответ

0 голосов
/ 08 февраля 2019

Одна вещь, которую вы могли бы сделать, это создать данные следующим образом:

input = np.array([[tweet.source, tweet.created_at, tweet.text, 
                   len(tweet.text), tweet.favorite_count, tweet.retweet_count]
                   for tweet in tweets])

Таким образом, вы только итерируете массив твитов один раз, чтобы построить матрицу, которую затем можете передать пандам:

dataframe = pd.DataFrame(input, columns=['Author', 'Date', 'Text', 'Length', 
                                       'Favorites', 'Retweets'])

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

Если вы собираетесьДля этого вам нужно создать список информационных фреймов, используя приведенное выше, а затем использовать pd.concat

df_total = pd.concat([df1, df2, ... dfn])

Или, если вы только что получили новую партию, вы можете попробовать:

df = pd.concat([df, df_new_batch])

ссылка на документ pd.concat

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