在将值应用于行时,Pandas取消列表

时间:2014-11-26 07:30:53

标签: python pandas

我有一个pandas数据框,如下所示:

in: df=pd.DataFrame(index=['A','B','C'], columns=['x','y'])

out:    x    y
    A  NaN  NaN
    B  NaN  NaN
    C  NaN  NaN

我有一个如下所示的列表

o = [[1, 2], [3, 4], [5, 6]]

当我使用上面的列表创建一个新列时,放在行中的值是一个带方括号[]的列表:

in: df["z"] = o

out:       x    y       z
      A  NaN  NaN  [1, 2]
      B  NaN  NaN  [3, 4]
      C  NaN  NaN  [5, 6]

我希望上面的数据框看起来如下(减去方括号):

          x    y       z
      A  NaN  NaN   1, 2
      B  NaN  NaN   3, 4
      C  NaN  NaN   5, 6

我如何实现上述目标?

2 个答案:

答案 0 :(得分:2)

你不能写一些自定义课程。您只能将对象放入DataFrame中。对象确定它们的显示方式。列表显示方括号,因此在DataFrame中显示列表值的方括号。没有显示括号,就无法将列表放在DataFrame中;括号随附一个列表。您可以改为使用元组,但随后您的DataFrame将显示括号:

>>> x = [(1, 2), (3, 4), (5, 6)]
>>> df["z"] = x
>>> df
     x    y       z
A  NaN  NaN  (1, 2)
B  NaN  NaN  (3, 4)
C  NaN  NaN  (5, 6)

当然,您也可以输入包含逗号的字符串,但是您的数据是字符串,因此您无法将它们作为元组或列表进行访问。

如果你想在DataFrame中有一个以某种方式显示自己的对象,你将必须编写自己的类,使用__repr__以你想要的方式显示自己,然后插入该类的实例在DataFrame中。 DataFrame只存储对象;对象的显示方式由这些对象决定,而不是由DataFrame决定(除非DataFrame在显示太长时将切断显示)。

答案 1 :(得分:0)

你的意思(没有括号)实际上是一种不同的数据类型。 方括号是列表,你需要元组:

in: df['z'] = [tuple(x) for x in o]

out:      x    y       z
       A  NaN  NaN  (1, 2)
       B  NaN  NaN  (3, 4)
       C  NaN  NaN  (5, 6)

      [3 rows x 3 columns]

圆括号与python

中没有括号基本相同