如何对numpy.arange生成数组的元素使用zfill左补零至6位
问题描述
- 现有一个包含
days列的DataFrame,该列共5条记录,取值分别为492、12374、300、87、90 - 初始需求为遍历每个条目,生成按30天为间隔拆分的天数数组,初始可正常运行的代码如下:
intervals_list = [] for i in df['days']: intervals = (np.arange(0,i,30)) intervals_list.append(intervals)
上述代码运行符合预期,共生成5个数组存入
intervals_list列表,其中对应天数300生成的数组内容为:array([ 0, 30, 60, 90, 120, 150, 180, 210, 240, 270])
- 新需求为将所有数组内的数值统一处理为6位长度,计划使用
zfill()方法在数字左侧补零至6位,但转换结果始终无法同步到原数组中,尝试过的错误实现如下:
for i in df['days']: intervals = (np.arange(0,i,30)) for i in intervals: i = str(i).zfill(6)
- 此外曾尝试在
arange生成数组的过程中直接调用zfill方法,同样运行失败。
错误原因
- 内层循环里的
i是遍历数组时取出的临时变量,给这个变量重新赋值,不会修改原数组里存储的实际内容 np.arange默认生成整数类型数组,本身不支持直接存储字符串格式的补零结果,且整数类型不能直接调用字符串专属的zfill()方法,直接调用必然报错
可行实现方案
生成原始间隔数组后,批量将数值转为6位补零的字符串格式,再存入结果列表即可,两种常用写法可选:
写法1:存为普通Python列表(最易理解)
intervals_list = [] for day_val in df['days']: raw_intervals = np.arange(0, day_val, 30) # 批量转换为6位补零字符串 formatted_intervals = [str(num).zfill(6) for num in raw_intervals] intervals_list.append(formatted_intervals)
写法2:保留numpy数组格式
如果需要后续继续用numpy的能力处理数组,可以直接用numpy的字符串处理接口生成字符串类型数组:
intervals_list = [] for day_val in df['days']: raw_intervals = np.arange(0, day_val, 30) # 先转字符串类型,再批量补零 formatted_intervals = np.char.zfill(raw_intervals.astype(str), 6) intervals_list.append(formatted_intervals)
以取值300的记录为例,转换后的结果为['000000', '000030', '000060', '000090', '000120', '000150', '000180', '000210', '000240', '000270'],符合补零要求。
内容的提问来源于stack exchange,提问作者Sarah Phillips
相关产品推荐
相关产品推荐

