【发布时间】:2013-10-22 07:55:24
【问题描述】:
如果我有这样的空数据框:
columns = ['Date', 'Name', 'Action','ID']
df = pd.DataFrame(columns=columns)
有没有办法在这个新创建的数据框中添加一个新行?目前我必须创建一个字典,填充它,然后将字典附加到最后的数据框。有没有更直接的方法?
【问题讨论】:
如果我有这样的空数据框:
columns = ['Date', 'Name', 'Action','ID']
df = pd.DataFrame(columns=columns)
有没有办法在这个新创建的数据框中添加一个新行?目前我必须创建一个字典,填充它,然后将字典附加到最后的数据框。有没有更直接的方法?
【问题讨论】:
试试这个:
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)]快得多。
len(df),为什么我们使用loc 而不是iloc?难道它没有匹配索引成员而不是行号的危险吗?
即将发布的 pandas 0.13 版本将允许通过 loc 在不存在的索引数据上添加行。但是,请注意,在后台,这会创建整个 DataFrame 的副本,因此它不是一个高效的操作。
描述是here,这个新功能被称为设置放大。
【讨论】:
loc 放大(iloc 可以添加 not-at-the-end 所以它有点模棱两可)
df中慢很多吗?
与经典的 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
【讨论】: