问题和我目前的解决方案:
例如,以纬度和经度值的两列为例:
| 迟|隆|
| - -|- -|
| 30.1239871239| -80.1239871239 |
| 30.1239991239的一个月| -80.1439871239 |
我想创建表示浮点数的整数列。
这是我目前拥有的:
| 迟|纬度_十进制|纬度符号|
| - -|- -|- -|
| 三十|小行星1239|一个|
| 三十|小行星123999|一个|
| 隆|长度_十进制|符号(_S)|
| - -|- -|- -|
| 八十|小行星1239| -1个|
| 八十|小行星1239| -1个|
通过执行以下操作,其中col是lat或lon
df[f'{col}_dec'] = df[col].apply(lambda x: int(str(x).split('.')[-1]))
df[f'{col}_sign'] = np.sign(df[col])
df[col] = abs(df[col].astype(int))
然后我运行一个过程,最小化每个列的数据类型,分别为第一个、第二个和第三个整型列生成uint 8、uint 32和int 8。即25%尺寸减小。
"你能让它变得更好吗"
- 你能把尺寸再缩小一点吗?
- 是否有更好的方法来创建列?
- 如果我的数据集非常大(5 TB),我是否应该这样做?
1条答案
按热度按时间vlju58qv1#
你能做得更好吗?
只有你知道什么是更好。
你能把尺寸再缩小一点吗?
是的。你现在存储坐标的方式有大约10μm(1 e-5 m)的分辨率。这似乎过于精确了。如果你能接受大约1米的分辨率,你可以把坐标值分解成63356个值的增量,并使用单个
uint16
或int16
来存储每个值(每个坐标对4个字节)。