如何将多个NumPy数组转换为垂直表格格式?
如何将多个NumPy数组转换为垂直表格格式?
嘿,我来帮你搞定这个问题!你遇到的错误根源很明确:你在尝试直接对整个NumPy数组应用格式化字符串,但格式化操作是针对单个元素的,而非整个数组对象,NumPy数组本身不支持这种直接的格式化方式,所以才会抛出unsupported format string passed to numpy.ndarray.__format__的错误。
咱们一步步来解决这个问题,先给你最贴合你现有代码的修复方案,再给你更便捷的替代方法:
方案1:纯NumPy+循环遍历(贴合你的原有代码)
核心思路是遍历每个数组的对应元素,而不是直接操作整个数组。我们可以用zip()函数把四个数组中索引对应的元素打包成元组,然后逐个对元素应用格式化:
import numpy as np # 你的原始数组 products = np.array(["laptop","smartphone","tablet"]) price = np.array([2999.99,1099.99,1009.99]) storage_space_MB = np.array([1500000,64000,512000]) quantity=np.array([8,20,16]) # 定义列宽 col_width = 15 # 处理表头和分隔线(你原来的这部分代码是对的) header = f"{'Product Name':<23}{'Price':<{col_width}}{'Storage Space (MB)':>{col_width}}{'Quantity':>{col_width}}" line = "="*72 # 打印表头 print(header) print(line) # 遍历每个产品的对应数据,逐个格式化元素 for prod, pr, storage, qty in zip(products, price, storage_space_MB, quantity): # 价格用.2f保证小数位数一致,更美观 row = f"{prod:<23}{pr:<{col_width}.2f}{storage:>{col_width}}{qty:>{col_width}}" print(row)
运行这段代码后,就能得到你想要的表格效果:
Product Name Price Storage Space (MB) Quantity ======================================================================== laptop 2999.99 1500000 8 smartphone 1099.99 64000 20 tablet 1009.99 512000 16
方案2:用Pandas一键生成表格(更便捷)
如果你不排斥使用第三方库,用Pandas可以省去手动格式化的麻烦,它会自动帮你整理成整齐的表格:
import numpy as np import pandas as pd # 你的原始数组 products = np.array(["laptop","smartphone","tablet"]) price = np.array([2999.99,1099.99,1009.99]) storage_space_MB = np.array([1500000,64000,512000]) quantity=np.array([8,20,16]) # 转换为DataFrame df = pd.DataFrame({ "Product Name": products, "Price": price, "Storage Space (MB)": storage_space_MB, "Quantity": quantity }) # 打印表格(去掉索引列) print(df.to_string(index=False))
运行后会输出和你预期完全一致的表格,而且不需要手动调整列宽和格式化规则,非常省心。
为什么你的原有代码报错?
再帮你复盘一下:你写的f"{products:<{23}}"是在尝试把整个products数组当作一个单独的对象来格式化,但NumPy数组的__format__方法不支持这种字符串格式化语法,必须针对数组内的单个元素进行操作,这就是zip()遍历能解决问题的原因。
内容来源于stack exchange
相关产品推荐
相关产品推荐

