我有一个数据框架:
s1 = pd.Series([5, 6, 7])
s2 = pd.Series([7, 8, 9])
df = pd.DataFrame([list(s1), list(s2)], columns = ["A", "B", "C"])
A B C
0 5 6 7
1 7 8 9
[2 rows x 3 columns]
并且我需要添加第一行[2,3,4],得到:
A B C
0 2 3 4
1 5 6 7
2 7 8 9
我尝试过append()和concat()函数,但找不到正确的方法。
如何添加/插入系列数据帧?
Concat()似乎比上一行插入和重新索引快一些。
如果有人想知道两种顶级方法的速度:
In [x]: %%timeit
...: df = pd.DataFrame(columns=['a','b'])
...: for i in range(10000):
...: df.loc[-1] = [1,2]
...: df.index = df.index + 1
...: df = df.sort_index()
每循环17.1 s±705 ms(平均±标准值7次运行,每循环1次)
In [y]: %%timeit
...: df = pd.DataFrame(columns=['a', 'b'])
...: for i in range(10000):
...: df = pd.concat([pd.DataFrame([[1,2]], columns=df.columns), df])
每循环6.53 s±127 ms(平均±标准值7次运行,每循环1次)
给出熊猫数据框架的数据结构是一个序列列表(每个序列为一列),方便在任意位置插入一列。
我想到的一个办法是先转置数据帧,插入一列,再转置回来。你可能还需要重命名索引(行名),就像这样:
s1 = pd.Series([5, 6, 7])
s2 = pd.Series([7, 8, 9])
df = pd.DataFrame([list(s1), list(s2)], columns = ["A", "B", "C"])
df = df.transpose()
df.insert(0, 2, [2,3,4])
df = df.transpose()
df.index = [i for i in range(3)]
df
A B C
0 2 3 4
1 5 6 7
2 7 8 9
s1 = pd.Series([5, 6, 7])
s2 = pd.Series([7, 8, 9])
df = pd.DataFrame([list(s1), list(s2)], columns = ["A", "B", "C"])
要在任意位置插入新行,可以指定行位置:
Row_pos = -1用于在顶部插入
或者row_pos = 0.5用于在第0行和第1行之间插入。
row_pos = -1
insert_row = [2,3,4]
df.loc[row_pos] = insert_row
df = df.sort_index()
df = df.reset_index(drop = True)
row_pos = -1
The outcome is:
A B C
0 2 3 4
1 5 6 7
2 7 8 9
row_pos = 0.5
The outcome is:
A B C
0 5 6 7
1 2 3 4
2 7 8 9
创建列名为空df:
df = pd.DataFrame(columns = ["A", "B", "C"])
插入新行:
df.loc[len(df.index)] = [2, 3, 4]
df.loc[len(df.index)] = [5, 6, 7]
df.loc[len(df.index)] = [7, 8, 9]