【问题标题】:Adding a list of multiple new rows to python dataframe without looping through将多个新行的列表添加到 python 数据帧而不循环
【发布时间】:2021-10-08 06:58:38
【问题描述】:

我有一个语料库如下

Col1 | Col2 | Col3 | Col4

A       B      C         D
D       G      H         F
I       K      P         Q
L       M      N         P

目的是在每列上创建二元组并创建单列python数据框,如下所示

(A,D)

(D,I)

(I,L)

(B,G)

(G,H)

我正在遍历每一列并为每一列创建一个二元列表。如何将它们添加到数据框中。我想避免循环遍历此列表以提高性能

txn_corpus_pair=pd.DataFrame(columns=['bigram'])

for i in range(0, txn_count):
    bigram_firstitem=txn_corpus.iloc[0:,i]
    bigram_seconditem=txn_corpus.iloc[1:,i]
    bigram_list=list(zip(bigram_firstitem,bigram_seconditem))

现在二元列表已准备好用于每一列。当我尝试一次性追加所有这些行时

txn_corpus_pair=txn_corpus_pair.append(bigram_list,ignore_index=True)

它将 bigram_list 读取为 2 个单独的列 - 并报告错误。我可以遍历列表并逐行追加,但这会非常低效。在追加完整列表方面需要帮助

【问题讨论】:

    标签: python dataframe


    【解决方案1】:

    我认为在这种情况下,您只需要将您的对嵌套在另一个列表中,这样数据框就不会尝试将它们移动到单独的列中。

    ls = [(1, 2) for _ in range(100)]
    print(pd.DataFrame(ls))
    # This produces two columns
    
    ls = [[(1, 2)] for _ in range(100)]
    print(pd.DataFrame(ls))
    # This produces one column
    

    【讨论】:

    • 我试过这个 - 这会将每列中的二元组转换为新行。因此,如果我在每个原始列中创建了 20 个二元组并且我有 10 个原始列,我最终将得到一个具有 10 行和 20 列的数据框。
    • 我想我对你期望从这个程序中得到的数据格式感到困惑。在 post 示例中,您从四列开始并生成 12 个二元组(每列 3 个)。然后,您是否想要一个新列用于所有 12 个二元组?是否要将二元组添加到现有列中?
    • 对于任何混淆,我深表歉意——我希望将所有的二元组放在一个列中。我的实际数据集大约有 100 列,大约 10,000 行。这将导致每个原始列大约 9999 个二元组。我的最终状态将是具有 9999*100 行的单列
    • 我想我现在明白了。您多次调用 append 对吗?您能否改为制作一个包含所有内容的大型 bigram_list 并仅追加一次? (虽然有嵌套列表将它们保持成对)。除了追加,您还可以尝试: txn_corpus_pair['col5'] = bigram_list
    • 如何-我分别处理每一列以避免将列 1 与列 2 的第一行等合并的最后一行...
    猜你喜欢
    • 1970-01-01
    • 2018-12-05
    • 2017-03-22
    • 1970-01-01
    • 2016-10-05
    • 2023-03-03
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    相关资源
    最近更新 更多