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)
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)