【问题标题】:Pandas: how to insert new data from list of lists under preexisting columns?Pandas:如何从预先存在的列下的列表中插入新数据?
【发布时间】:2019-07-02 07:41:44
【问题描述】:

所以,我有一个空的 pandas 数据框,我计划多次追加,我给它列,用

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

最终,我拥有列表列表(或数组数组,如果你愿意的话)形式的数据,并希望将所有数据添加到当前列下的空数据框中。

数据是这样生成的,(我正在从 twitter 上抓取数据,顺便说一句)

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)),我会得到以下混乱的结果,

在这种情况下,如何有效地将此类数据附加到我的数据框中?

提前谢谢大家。

【问题讨论】:

    标签: python arrays pandas dataframe append


    【解决方案1】:

    您可以做的一件事是创建这样的数据:

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

    这样,您只需遍历 tweet 数组一次即可构造矩阵,然后您可以将其提供给 pandas:

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

    一次性构建所有数据,然后围绕它构建一个 pandas 数据框,比将每个观察结果附加到数据框要高效得多。

    如果您要使用分桶方法,我建议您使用上述方法构建一个数据框列表,然后使用pd.concat

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

    或者,如果您刚刚收到新批次,您可以尝试:

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

    链接到pd.concat的文档

    【讨论】:

    • 虽然我很欣赏更高效的 input 数组创建示例,但我的 twitter 流应用程序将一次处理数百条推文,因此我需要每次都将数据附加到 pandas 数据帧.我怎么能这样做?
    • 当然!您可以将数据框列表传递给pd.concat,这将连接它们并返回一个合并的数据框。查看我的编辑!
    • 非常感谢您的快速回答!尽管您给了我一个完全可行且很好的解决方案,但除了使用数据框和像我这样的数组输入之外,是否有一种方法可以基本上完​​成 pd.concat 所做的事情?我只是问,因为我不知道为每一个新数据创建新的 pandas 数据帧的效率有多高。
    • 问题是,要让它与 append 一起工作,您需要向它传递一个 DataFrame,这意味着您无论如何都需要将数据转换为数据框。另一种选择可能是在 numpy 级别组合数据,然后将结果转换为 pandas?
    猜你喜欢
    • 2013-08-06
    • 1970-01-01
    • 2015-06-15
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多