pandas - 在 pandas.DataFrame,添加一行

我成功地创建了一个空DataFrame,其中包含:


res = DataFrame(columns=('lib', 'qty1', 'qty2'))

然后,我可以添加一个新行,并用以下方法填充字段:


res = res.set_value(len(res), 'qty1', 10.0)

但是它很奇怪(无法添加字符串值)

如何在DataFrame (使用不同的列类型)中添加新行?

时间:


>df = DataFrame(columns=('lib', 'qty1', 'qty2'))
 for i in range(5):
 df.loc[i] = [randint(-1,1) for n in range(3)]

>print(df)
 lib qty1 qty2
0 0 0 -1
1 -1 -1 1
2 1 -1 1
3 0 0 0
4 1 -1 -1

[5 rows x 3 columns]

你可以使用pandas.concat()DataFrame.append()

你可以创建字典列表,每个字典对应一行,然后将这些行添加到for循环的主列表中,一旦列表完成,就创建一个数据框,这是一个更快的方法。


rows_list = []
for row in rows:

 dict1 = {}
 # get the row in dictionary format
 dict1.update(blah..) 

 rows_list.append(dict1)

df = pd.DataFrame(rows_list) 


import pandas as pd
import numpy as np
# we know we're gonna have 5 rows of data
numberOfRows = 5
# create dataframe
df = pd.DataFrame(index=np.arange(0, numberOfRows), columns=('lib', 'qty1', 'qty2') )

# now fill it up row by row
for x in np.arange(0, numberOfRows):
 #loc or iloc both work here since the index is natural numbers
 df.loc[x] = [np.random.randint(-1,1) for n in range(3)]
In[23]: df
Out[23]: 
 lib qty1 qty2
0 -1 -1 -1
1 0 0 0
2 -1 0 -1
3 0 -1 0
4 -1 0 0

速度比较


In[30]: %timeit tryThis() # function wrapper for this answer
In[31]: %timeit tryOther() # function wrapper without index (see, for example, @fred)
1000 loops, best of 3: 1.23 ms per loop
100 loops, best of 3: 2.31 ms per loop

增加数组(12 )的大小和(500 )的行数,使速度差异更显著: 313ms vs 2.29 s

通过loc在非现有索引数据中添加行。

...