Python 将列表作为行插入数据帧中的特定位置

Python 将列表作为行插入数据帧中的特定位置,python,pandas,Python,Pandas,我有一个列表l=['a','b','c'] 和一个数据帧,其中列d、e、f和值都是数字 如何在列下方的数据框中插入列表l。设置 df = pd.DataFrame(np.ones((2, 3), dtype=int), columns=list('def')) l = list('abc') df d e f 0 1 1 1 1 1 1 1 pd.DataFrame([l], columns=df.columns).append(df, ignore_index=Tr

我有一个列表l=['a','b','c']

和一个数据帧,其中列d、e、f和值都是数字
如何在列下方的数据框中插入列表l。

设置

df = pd.DataFrame(np.ones((2, 3), dtype=int), columns=list('def'))
l = list('abc')

df

   d  e  f
0  1  1  1
1  1  1  1
pd.DataFrame([l], columns=df.columns).append(df, ignore_index=True)

   d  e  f
0  a  b  c
1  1  1  1
2  1  1  1
pd.DataFrame([l] + df.values.tolist(), columns=df.columns)

   d  e  f
0  a  b  c
1  1  1  1
2  1  1  1

选项1
我将通过向columns对象添加一个级别来完成此任务

df.columns = pd.MultiIndex.from_tuples(list(zip(df.columns, l)))
df

   d  e  f
   a  b  c
0  1  1  1
1  1  1  1

选项2
使用传递给dataframe构造函数的字典理解

pd.DataFrame({(i, j): df[i] for i, j in zip(df, l)})

   d  e  f
   a  b  c
0  1  1  1
1  1  1  1

但是如果你坚持把它放在数据框里。。。(请记住,这会将数据帧变成
dtype
对象
,我们会损失大量的计算效率。)

备选方案1

df = pd.DataFrame(np.ones((2, 3), dtype=int), columns=list('def'))
l = list('abc')

df

   d  e  f
0  1  1  1
1  1  1  1
pd.DataFrame([l], columns=df.columns).append(df, ignore_index=True)

   d  e  f
0  a  b  c
1  1  1  1
2  1  1  1
pd.DataFrame([l] + df.values.tolist(), columns=df.columns)

   d  e  f
0  a  b  c
1  1  1  1
2  1  1  1

备选方案2

df = pd.DataFrame(np.ones((2, 3), dtype=int), columns=list('def'))
l = list('abc')

df

   d  e  f
0  1  1  1
1  1  1  1
pd.DataFrame([l], columns=df.columns).append(df, ignore_index=True)

   d  e  f
0  a  b  c
1  1  1  1
2  1  1  1
pd.DataFrame([l] + df.values.tolist(), columns=df.columns)

   d  e  f
0  a  b  c
1  1  1  1
2  1  1  1

使用
pd.concat

In [1112]: df
Out[1112]:
          d         e         f
0  0.517243  0.731847  0.259034
1  0.318821  0.551298  0.773115
2  0.194192  0.707525  0.804102
3  0.945842  0.614033  0.757389

In [1113]: pd.concat([pd.DataFrame([l], columns=df.columns), df], ignore_index=True)
Out[1113]:
          d         e         f
0         a         b         c
1  0.517243  0.731847  0.259034
2  0.318821  0.551298  0.773115
3  0.194192  0.707525  0.804102
4  0.945842  0.614033  0.757389

你在找我吗

df = pd.DataFrame([[1,2,3]],columns=list('def'))
I = ['a','b','c']
ndf = df.append(pd.Series(I,index=df.columns.tolist()),ignore_index=True)
输出:

d e f 0 1 2 3 1 a b c d e f 0 1 2 3 1 a b c
如果要将列表添加到
多索引的
列中

df.columns = [df.columns, l]
print (df)
   d  e  f
   a  b  c
0  4  7  1
1  5  8  3
2  4  9  5
3  5  4  7
4  5  2  1
5  4  3  0

print (df.columns)
MultiIndex(levels=[['d', 'e', 'f'], ['a', 'b', 'c']],
           labels=[[0, 1, 2], [0, 1, 2]])
如果要将列表添加到特定位置
pos

pos = 0
df1 = pd.DataFrame([l], columns=df.columns)
print (df1)
   d  e  f
0  a  b  c

df = pd.concat([df.iloc[:pos], df1, df.iloc[pos:]], ignore_index=True)
print (df)
   d  e  f
0  a  b  c
1  4  7  1
2  5  8  3
3  4  9  5
4  5  4  7
5  5  2  1
6  4  3  0
但如果将此列表附加到数字数据帧,则会得到混合类型-带字符串的数字,因此某些函数应该失败

设置:

df = pd.DataFrame({'d':[4,5,4,5,5,4],
                   'e':[7,8,9,4,2,3],
                   'f':[1,3,5,7,1,0]})

print (df)

是否要将其添加到特定单元格或附加到数据框?数据框在每列中已经有一些值。我希望列表添加到列名的正下方。比如a应该在d下面,b应该在e下面,c应该在fI下面,比如
df.columns=[df.columns,l]