首先,我做到了
a = [[6,5,4,3,2],[1,2,3,4,5,6],[3,4,5,6]]
b = pd.DataFrame(a)
print(b.head(2))
输出为
1 2 3 4 5 6
6 5 4 3 2.00 NaN
1 2 3 4 5.00 6.00
3 4 5 6 NaN NaN
所以我就这么做了
a = [[6,5,4,3,2],[1,2,3,4,5,6],[3,4,5,6]]
b = pd.DataFrame(a).fillna(-1).astype(int)
print(b.head(2))
输出变为
1 2 3 4 5 6
6 5 4 3 2 -1
1 2 3 4 5 6
3 4 5 6 -1 -1
但我不想要那些-1,所以我这样做了
a = [[6,5,4,3,2],[1,2,3,4,5,6],[3,4,5,6]]
b = pd.DataFrame(a).fillna(-1).astype(int)
b = b.replace(-1, np.NaN)
print(b.head(2))
输出再次与第一次相同
1 2 3 4 5 6
6 5 4 3 2.00 NaN
1 2 3 4 5.00 6.00
3 4 5 6 NaN NaN
最佳答案
因为这个:
type(np.nan)
# float
如果您的列中有 NaN
,则列的其余部分会自动向上转换为 float
以实现高效计算。
Pandas 0.24+
我们可以使用Nullable Integer Type允许整数与 NaN 共存:
b = b.astype('Int32')
b
0 1 2 3 4 5
0 6 5 4 3 2 NaN
1 1 2 3 4 5 6
2 3 4 5 6 NaN NaN
b.dtypes
0 Int32
1 Int32
2 Int32
3 Int32
4 Int32
5 Int32
dtype: object
<= 0.23
要解决这个问题,请将dtype
转换为object
,我不建议这样做,除非它仅用于显示目的(你杀死这样效率就高了)。
u = df.select_dtypes(float)
b[u.columns] = u.astype(object)
b
0 1 2 3 4 5
0 6 5 4 3 2 NaN
1 1 2 3 4 5 6
2 3 4 5 6 NaN NaN
print(b.dtypes)
0 int64
1 int64
2 int64
3 int64
4 object
5 object
dtype: object
关于python - 用 NaN 替换整数会导致整个列变成 float 据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46842005/