【问题标题】:How to add an extra row to a pandas dataframe [duplicate]如何向熊猫数据框添加额外的行[重复]
【发布时间】:2013-10-22 07:55:24
【问题描述】:

如果我有这样的空数据框:

columns = ['Date', 'Name', 'Action','ID']
df = pd.DataFrame(columns=columns) 

有没有办法在这个新创建的数据框中添加一个新行?目前我必须创建一个字典,填充它,然后将字典附加到最后的数据框。有没有更直接的方法?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    试试这个:

    df.loc[len(df)]=['8/19/2014','Jun','Fly','98765'] 
    

    警告:此方法仅在索引中没有“洞”时有效。例如,假设您有一个包含三行的数据框,索引为 0、1 和 3(例如,因为您删除了第 2 行)。然后,len(df) = 3,因此上述命令不会添加新行 - 它会覆盖第 3 行。

    【讨论】:

    • df.loc[df.shape[0]](甚至df.loc[len(df.index)])比df.loc[len(df)]快得多。
    • 一个元素 >>> timeit.timeit(lambda : len(flows)) 2.4147243930055993 >>> timeit.timeit(lambda : flow.shape[0]) 3.4786632809991715 4k 个元素: >>> timeit. timeit(lambda : len(flows)) 2.520429938987945 >>> timeit.timeit(lambda : flow.shape[0]) 3.6195146050013136
    • 如果您使用的是len(df),为什么我们使用loc 而不是iloc?难道它没有匹配索引成员而不是行号的危险吗?
    • 天哪,这花了很长时间才弄清楚!非常感谢!
    • 这是一种将行附加到数据帧的非常慢的方法。作为一个实际的例子,我使用这种方法通过解析一个文件创建了一个数据框,该文件有 150 万行,耗时 7 多个小时。用字典完成同样的事情,然后放入数据框中大约需要 10 秒。这在内部发生是因为附加到系列的速度很慢。请参阅 stackoverflow.com/a/37992805/1224075 了解内部发生的情况。
    【解决方案2】:

    即将发布的 pandas 0.13 版本将允许通过 loc 在不存在的索引数据上添加行。但是,请注意,在后台,这会创建整个 DataFrame 的副本,因此它不是一个高效的操作。

    描述是here,这个新功能被称为设置放大

    【讨论】:

    • 只允许通过loc 放大(iloc 可以添加 not-at-the-end 所以它有点模棱两可)
    • 错字,已更正,谢谢。
    • 我在一个空的 DataFrame 上尝试过这样做,但我发现它不起作用。似乎只有当框架至少有一行时才有效....
    • 我发现这会从添加的 Series 中删除尚未在 DataFrame 中的所有列。在这种情况下,文档具有误导性,因为它指出“设置放大”就像“追加”操作,即使“追加”会将任何新列添加到 DataFrame。
    • 这不是比创建字典然后将整个字典添加到df中慢很多吗?
    【解决方案3】:

    与经典的 dict+append 相比,我发现另一种方法很难看,但它有效:

    df = df.T
    
    df[0] = ['1/1/2013', 'Smith','test',123]
    
    df = df.T
    
    df
    Out[6]: 
           Date   Name Action   ID
    0  1/1/2013  Smith   test  123
    

    【讨论】:

      猜你喜欢
      • 2019-11-12
      • 1970-01-01
      • 2017-02-11
      • 2019-11-17
      • 2014-08-29
      • 1970-01-01
      • 2018-10-14
      • 2017-12-07
      • 2021-06-11
      相关资源
      最近更新 更多