仅绘制大型pandas数据帧

时间:2017-08-07 22:32:04

标签: python python-3.x pandas matplotlib

我有一个434300行的pandas数据帧,结构如下:

       x    y        p1  p2 
1      8.0  1.23e-6  10  12
2      7.9  4.93e-6  10  12
3      7.8  7.10e-6  10  12
...
.
...
4576   8.0  8.85e-6  5   16
4577   7.9  2.95e-6  5   16
4778   7.8  3.66e-6  5   16
...
...
...
434300 ...

关键点是对于变化的x,y数据的每个块,存在不变化的p1和p2 。请注意,这些常量p1,p2的块具有不同的长度,因此不仅仅是每隔 n 行切片数据的问题。

我想在图表中绘制值p1和p2,但只想绘制唯一的点。

如果我使用:

绘制p1和p2
In [1]: fig=plt.figure()
In [2]: ax=plt.subplot(111)
In [3]: ax.plot(df['p1'],df['p2'])
In [4]: len(ax.lines[0].get_xdata())
Out[4]: 434300

我看到matplotlib正在绘制每个单独的数据行。

仅绘制p1和p2列的唯一点的最佳方法是什么?

Here是一个小示例数据集的csv,它包含我的数据集的所有重要功能。

4 个答案:

答案 0 :(得分:2)

只需删除重复项并绘制:

df.drop_duplicates(how='all', columns=['p1', 'p2'])[['p1', 'p2]].plot()

答案 1 :(得分:2)

您可以从数据框中对p1p2列进行切片,然后在绘图之前删除重复项。

sub_df = df[['p1','p2']].drop_duplicates()
fig, ax = plt.subplots(1,1)
ax.plot(sub_df['p1'],sub_df['p2'])

答案 2 :(得分:2)

import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv('exampleData.csv')

d = data[['p1', 'p2']].drop_duplicates()

plt.plot(d['p1'], d['p2'], 'o')
plt.show()

enter image description here

答案 3 :(得分:1)

在查看R中类似问题的this答案后(这是大熊猫数据框的基础)我找到了pandas函数pandas.Dataframe.drop_duplicates。如果我们修改我的示例代码如下:

In [1]: fig=plt.figure()
In [2]: ax=plt.subplot(111)
In [3]: df.drop_duplicates(subset=['p1','p2'],inplace=True)
In [3]: ax.plot(df['p1'],df['p2'])
In [4]: len(ax.lines[0].get_xdata())
Out[4]: 15

我们发现这会将df限制为仅绘制的唯一点。重要的一点是,您必须将子集传递给drop_duplicates,以便它仅使用这些列来确定重复的行。