请注意下面的.astype('int8')
d = pd.DataFrame({c:np.random.choice(range(10),size=20) \
for c in list('abcd')}).astype('int8')
d.groupby(d.columns.tolist(),as_index=False).size().info()
从而产生
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 20 entries, 0 to 19
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 a 20 non-null int64
1 b 20 non-null int64
2 c 20 non-null int64
3 d 20 non-null int64
4 size 20 non-null int64
dtypes: int64(5)
memory usage: 928.0 bytes
**有没有办法让pandas保留原来的dtypes?**否则会占用太多内存。
我的pd.__version__
是1.3.5
,与1.5.3
的结果相同(但不是2.0.2
作为@rickhg12hs评论!根据this answer,转换不应该发生,但这与我观察到的不一致。
1条答案
按热度按时间t30tvxxf1#
我不认为你想groupby在这里:
你正在创建一个dataframe,其中索引是你的值,这只有在你试图计算每行出现的次数时才真正有用,在这种情况下,存在更好的选择:
一个
print(ret.dtypes)
将向你保证我们完全仍然在int8
中。