如何在pandas数据帧中添加额外的行

Ahd*_*dee 41 python pandas

如果我有一个空的数据帧:

columns = ['Date', 'Name', 'Action','ID']
df = pd.DataFrame(columns=columns) 
Run Code Online (Sandbox Code Playgroud)

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

小智 86

试试这个:

df.loc[len(df)]=['8/19/2014','Jun','Fly','98765'] 
Run Code Online (Sandbox Code Playgroud)

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

  • `df.loc [df.shape [0]]`(甚至`df.loc [len(df.index)]`)比`df.loc [len(df)]`快得多. (14认同)
  • 如果你使用`len(df)`,为什么我们使用`loc`而不是`iloc`?它是否有匹配索引成员而不是行号的危险? (4认同)
  • 这是一种将行添加到数据帧的令人难以置信的SLOW方法.作为一个实际的例子,我使用这种方法创建了一个解析文件有150万行的数据帧,花了7个多小时.完成字典然后放入数据帧时大约需要10秒钟.内部发生这种情况是因为系列附加缓慢.有关了解内部情况的信息,请参阅/sf/answers/2659496381/. (3认同)
  • 一个元素>>> timeit.timeit(lambda:len(流))2.4147243930055993 >>> timeit.timeit(lambda:flows.shape [0])3.4786632809991715 4k元素:>>> timeit.timeit(lambda:len(流)) )2.520429938987945 >>> timeit.timeit(lambda:flows.shape [0])3.6195146050013136 (2认同)

Bou*_*oud 38

即将推出的pandas 0.13版本将允许loc在非现有索引数据上添加行.

描述在这里,这个新功能称为设置放大.

  • 这不是比创建字典然后将整个字典添加到`df`慢得多吗? (3认同)

Bou*_*oud 5

与经典的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
Run Code Online (Sandbox Code Playgroud)