带有 dicts 的 df.append() 将布尔值转换为 1 和 0

wkz*_*zhu 6 python python-3.x pandas

假设我创建了一个空数据框:

df = pd.DataFrame()
Run Code Online (Sandbox Code Playgroud)

我通过df.append()以下方式添加了一个字典:

df.append({'A': 'foo', 'B': 'bar'}, ignore_index=True)
Run Code Online (Sandbox Code Playgroud)

这给了我预期的结果

     A    B
0  foo  bar
Run Code Online (Sandbox Code Playgroud)

但是,如果 dict 值中有任何布尔值,即,

df.append({'A': True, 'B': False}, ignore_index=True)
Run Code Online (Sandbox Code Playgroud)

布尔值转换为浮点数。

     A    B
0  1.0  0.0
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况/如何防止这种转换?如果可能的话,我宁愿不对完成的数据帧做任何事情(即,不喜欢将浮点数强制转换回布尔值)。

编辑:找到了我自己的解决方案,但仍然想知道为什么会发生上述行为。我的解决办法是:

df.append(pd.DataFrame.from_dict({'A': True, 'B': False}, orient='index').T, ignore_index=True)
Run Code Online (Sandbox Code Playgroud)

这给出了所需的

      A      B
0  True  False
Run Code Online (Sandbox Code Playgroud)

jer*_*ycg 1

You can convert your dict to a DataFrame before appending to keep the data types consistent:

df = pd.DataFrame()
df.append(pd.DataFrame({'A': True, 'B': False}, index = [0]))


     A      B
0   True    False
Run Code Online (Sandbox Code Playgroud)