首页 > 解决方案 > 如何在 DataFrame 中插入一行(列表)?

问题描述

伙计们,

我有一个列定义的 DataFrame 和一个像这样的列表:

df = pd.DataFrame(columns=list('ABCDEF'))

[0.25, 1, [97, 99], array([18.,  16.,  17.]), array([ 31.,  30.,  29.]), array([ 0.])]

实际上,此列表中的每个元素都是我预期的 DataFrame 的列,我想要类似的内容:

A       B         C                  D                    E             F
0.25    1   [97,99]  [18.,  16.,  17.]   [ 31.,  30.,  29.]         [ 0.]

我可以在while循环中插入列表,即在DataFrame中插入一行,例如在第二个循环中我有另一行,如:

[0.25, 2, [132, 134], 数组([17.]), 数组([ 29., 30., 31.]), 数组([15., 16.])]

A       B           C                  D                    E             F
0.25    1     [97,99]  [18.,  16.,  17.]   [ 31.,  30.,  29.]         [ 0.]
0.25    2   [132,134]              [17.]   [ 29.,  30.,  31.]    [15., 16.]

但是当我创建 DataFrame 时,它​​总是将数组中的元素放入一列:

                                0    A    B    C    D    E    F
0                            0.25  NaN  NaN  NaN  NaN  NaN  NaN
1                               1  NaN  NaN  NaN  NaN  NaN  NaN
2  [97.7123918594, 99.7123918594]  NaN  NaN  NaN  NaN  NaN  NaN
3  [17.0, 24.0, 18.0, 16.0, 17.0]  NaN  NaN  NaN  NaN  NaN  NaN
4              [31.0, 30.0, 29.0]  NaN  NaN  NaN  NaN  NaN  NaN
5                           [0.0]  NaN  NaN  NaN  NaN  NaN  NaN

有什么办法可以得到我的期望?万分感激。

标签: pythonpandas

解决方案


您可以使用.loc

In [324]: df = pd.DataFrame(columns=list('ABCDEF'))

In [325]: l1 = [0.25, 1, [97, 99], array([18.,  16.,  17.]), array([ 31.,  30.,  29.]), array([ 0.])]

In [326]: df.loc[len(df.index)] = l1

In [327]: df
Out[327]:
      A  B         C                   D                   E      F
0  0.25  1  [97, 99]  [18.0, 16.0, 17.0]  [31.0, 30.0, 29.0]  [0.0]

但是,如果您事先有列表列表,则可以

pd.DataFrame([l1, l2, ..., ln], columns=list('abcdef'))

推荐阅读