我有一个Pandas数据框,其中有3列( x,y,d )和大约 200、000 行。 x 和 y 是整数,表示网格的位置。 d 表示网格的点密度。大约缺少 90 行(不包含在df中),所有这些行的 d 为0。
我想将数据帧绘制成 501 * 501 像素,每个像素的颜色由其相应的 d 确定。
我能够使用numpy,matplotlib和PIL进行操作,图像如下所示:gray scale heat map.但是,运行时间约为 16s 。我想知道是否有改善性能的方法吗?
代码如下:
QtAndroidExtras
最后一步,遍历数据帧并为像素着色是最耗时的(〜16s ),我是否可以使用其他替代方法?非常感谢你。
更新: 在我的代码中,我没有使用 [] 运算符,而是使用了 .at [] 来索引熊猫数据框。运行时间提高了100%(〜8s )。但是,我仍然很想知道如何进一步改进它。
答案 0 :(得分:1)
使用pixels
作为三维数组,我们可以以矢量化方式进行分配-
pixels = np.zeros((501,501,3),dtype=np.uint8)
pixels[df['x'], df['y']] = np.vstack(df['d'].values)
答案 1 :(得分:1)
使用Pillow可以轻松地将熊猫数据框转换为图像。希望这些语法中的任何一种都能帮助您解决问题
dataframe = pd.read_csv('A.csv'), header=None)
dataframe.to_numpy()
# create Pillow image
image = Image.fromarray(dataframe, 'L') # L is mode for grayscale
print(type(image))
# summarize image details
print(image.mode)
print(image.size)
#save image
img_filename = 'A.bmp'
image.save(img_filename)
print('saved:', img_filename)