考虑字典 d
:
d = {'A': {'x': 1, 'y': 1}, 'B': {'y': 1, 'z': 1}}
当我将此传递给 pandas.DataFrame 时构造函数,我知道我将缺少 x 行 B 列和 z 行 A 列的值。
df = pd.DataFrame(d)
df
A B
x 1.0 NaN
y 1.0 1.0
z NaN 1.0
我想要那些
NaN
需填写0
.我当然知道我可以填写。df.fillna(0)
但现在他们都是花车
A B
x 1.0 0.0
y 1.0 1.0
z 0.0 1.0
是的!我可以强制他们使用整数
df.fillna(0).astype(int)
A B
x 1 0
y 1 1
z 0 1
或者!我本可以用巧妙的字典理解构建一个系列,并用 fill_value 参数拆开
pd.Series(
{(i, j): v for j, d_ in d.items() for i, v in d_.items()}
).unstack(fill_value=0)
但是,如果有一种直接的方法从一开始就用默认值填充缺失值,那么所有这一切都会容易得多。我希望像
pd.DataFrame(d, dtype=int, fill_value=0)
我知道这不可用,但还有什么我错过的吗?
最佳答案
自 pandas 0.24您可以使用 Int64 dtype:
import pandas as pd
d = {'A': {'x': 1, 'y': 1}, 'B': {'y': 1, 'z': 1}}
pd.DataFrame(d, dtype='Int64').fillna(0)
输出:
A B
x 1 0
y 1 1
z 0 1
小心资本我在' 我 nt64'。如果你用较低的 'i' 写它,即 'int64',你会得到浮点数。
关于python - 构建特定 dtype 的数据框时,pandas 是否具有默认填充值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41460685/