我把问题归结为这个例子。我在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
答案 0 :(得分:0)
万一有人遇到同样的问题。我reported the issue,答案如下:
这是预期的。 np.nan是缺失值指示符,而不是None。 我们很少允许本地无;非高效的蟒蛇 对象
所以看起来我试图做的事情是行不通的。我解决它的方法是使用我拥有的值构建一个字典,然后为新行中的所有其他列添加映射到None
的键。