将整个列表放在一个dataframe列中

时间:2019-06-19 19:32:16

标签: python pandas dataframe dictionary

我正在尝试从字典创建数据框:

dict = {'foo': [1, 2, 3, 4],
        'bar': [5, 6, 7, 8]}

,然后使用以下命令创建数据框:

df = pd.DataFrame.from_dict(dict, orient='index')

但输出如下:

df:
           0  1  2  3
     foo   1  2  3  4
     bar   4  5  6  7

但是我希望输出如下所示,只有一列:

df:
           'column_name'
     foo    [1, 2, 3, 4]
     bar    [4, 5, 6, 7]

5 个答案:

答案 0 :(得分:2)

您正在传递包含“类似列表”值的字典。当pandas传递给DataFrame 构造函数时,会将字典的键解释为Series标签,并将每个列表中的值解释为每个Series的新行值。

使用from_dict类方法时,将为您提供方向选项,该选项可让您指定字典的键是否代表行或列标签,但指定“类似列表”的值字典的内容仍将被解释为新列或新行。

同时使用这两种方法还要求值的长度一致。


pd.DataFrame.from_dict(dct, orient='index')

     0  1  2  3
foo  1  2  3  4
bar  5  6  7  8

pd.DataFrame.from_dict(dct, orient='columns')

   foo  bar
0    1    5
1    2    6
2    3    7
3    4    8

相反,您对一维pd.Series感兴趣,它将使用字典并将每个键用作行标签,并将每个值用作行值。

pd.Series(dct)

foo    [1, 2, 3, 4]
bar    [5, 6, 7, 8]
dtype: object

根据我在上面的评论,如果您对DataFrame感兴趣,则可以使用to_frame,它将保留存储在Series中的值。

pd.Series(dct).to_frame('column_name')

      column_name
foo  [1, 2, 3, 4]
bar  [5, 6, 7, 8]

答案 1 :(得分:1)

如果您使用的是python3.6 +,则可以依靠字典的有序性质来创建仅以column_name为键的另一本字典:

d = {'foo': [1, 2, 3, 4], 'bar': [5, 6, 7, 8]}

df = pd.DataFrame([{'column_name': v} for v in d.values()], index=d.keys())

df
      column_name
foo  [1, 2, 3, 4]
bar  [5, 6, 7, 8]

否则,我肯定会默认使用@ user3483203的答案

答案 2 :(得分:1)

pd.DataFrame({'col_name': pd.Series(dict)})  

结果:

         col_name
foo  [1, 2, 3, 4]
bar  [5, 6, 7, 8]

答案 3 :(得分:1)

使用字典创建系列并转换为数据框:

dct = {'foo': [1, 2, 3, 4],
       'bar': [5, 6, 7, 8]}

pd.Series(dct).to_frame('column_name')

Out[937]:
      column_name
bar  [5, 6, 7, 8]
foo  [1, 2, 3, 4]

注意:请不要使用dict作为变量名。这是一个坏习惯。

答案 4 :(得分:1)

您可以尝试:

frame=pd.Series(dict).rename('column_name')