我有一个数据框架:

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()函数,但找不到正确的方法。

如何添加/插入系列数据帧?


当前回答

在pandas数据帧中添加一行的最简单方法是:

DataFrame.loc[ location of insertion ]= list( )

例子:

DF.loc[ 9 ] = [ ´Pepe’ , 33, ´Japan’ ]

注意:列表的长度应该与数据帧的长度相匹配。

其他回答

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

不知道你是如何调用concat(),但它应该工作,只要两个对象是相同的类型。也许问题是你需要将你的第二个向量转换为一个数据框架?使用df,你定义了以下工作为我:

df2 = pd.DataFrame([[2,3,4]], columns=['A','B','C'])
pd.concat([df2, df])

在pandas DataFrame中添加一行非常简单:

创建一个常规的Python字典,其列名与你的Dataframe相同; 使用pandas.append()方法并传入字典的名称,其中.append()是DataFrame实例上的方法; 在字典名称后面添加ignore_index=True。

给出熊猫数据框架的数据结构是一个序列列表(每个序列为一列),方便在任意位置插入一列。 我想到的一个办法是先转置数据帧,插入一列,再转置回来。你可能还需要重命名索引(行名),就像这样:

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

下面是在不排序和重置索引的情况下将一行插入pandas数据框架的最佳方法:

import pandas as pd

df = pd.DataFrame(columns=['a','b','c'])

def insert(df, row):
    insert_loc = df.index.max()

    if pd.isna(insert_loc):
        df.loc[0] = row
    else:
        df.loc[insert_loc + 1] = row

insert(df,[2,3,4])
insert(df,[8,9,0])
print(df)