使用放大

时间:2016-05-25 08:06:00

标签: python pandas

我把问题归结为这个例子。我在Windows 7上运行Python 2.7并使用pandas 0.17.1。

>>> import pandas as pd
>>> print pd.__version__
0.17.1
>>> x = pd.DataFrame({"a":["james"], "b":[True], "c":["john"]})
>>> x
       a     b     c
0  james  True  john
>>> x.loc[1] = None
>>> x
       a   b     c
0  james   1  john     ##<< THE TYPE HAS CHANGED
1    NaN NaN   NaN
>>> x.loc[1,"a"] = "james1"
>>> x.loc[1,"c"] = "john1"
>>> x.loc[1,"b"] = True
>>> x
        a     b      c
0   james     1   john
1  james1  True  john1 ## << BUT THE NEXT INSERT WAS OK
>>> x.loc[2] = None    ## << AND THIS DOESN'T REPLICATE THE ISSUE
>>> x
        a     b      c
0   james     1   john
1  james1  True  john1
2     NaN   NaN    NaN

在上面我尝试向DF添加一个额外的行。我可以说“手动”填充行,因为在我的实际情况中我还不知道所有列值,我可能需要添加一个额外的列,所以我先填写已知数据。

然而,第一次放大会将True更改为1。随后的扩大没有这个问题。但这确实意味着最终我有一个带有0,1和bool列的DF,这很烦人。

有谁知道为什么会这样?

有趣的是,如果我在上面的示例中一次添加完整的行,则问题不会发生......

>>> x = pd.DataFrame({"a":["james"], "b":[True], "c":["john"]})
>>> x
       a     b     c
0  james  True  john
>>> x.loc[1] = {"a": "james", "b" : False, "c" : "henry"}
>>> x
       a      b      c
0  james   True   john
1  james  False  henry

1 个答案:

答案 0 :(得分:0)

万一有人遇到同样的问题。我reported the issue,答案如下:

  

这是预期的。 np.nan是缺失值指示符,而不是None。   我们很少允许本地无;非高效的蟒蛇   对象

所以看起来我试图做的事情是行不通的。我解决它的方法是使用我拥有的值构建一个字典,然后为新行中的所有其他列添加映射到None的键。