将熊猫数据帧转换为位图的更有效方法是什么?

时间:2018-08-07 18:30:37

标签: python pandas numpy matplotlib python-imaging-library

我有一个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 )。但是,我仍然很想知道如何进一步改进它。

2 个答案:

答案 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)