Pandas:更简洁地从多个列中删除空值

时间:2017-07-19 11:51:16

标签: python pandas null

import matplotlib.pyplot as plt
import pandas as pd

data = pd.DataFrame({ 'X': [1, 2, 3],
                      'Y': [4, 5, 6],
                      'A1': [1, None, 3],
                      'A2': [4, 5, 6],
                      'A3': ['Not', 'being', 'used'],
                      'A4': [None, 3, 3, None] })

_ = plt.figure()
_ = plt.hist([ data['A1'][pd.notnull(data['A1'])],
               data['A2'][pd.notnull(data['A2'])],
               data['A4'][pd.notnull(data['A4'])] ],
             label=['A1', 'A2', 'A4'])
_ = plt.legend()
_ = plt.show()

我是否可以通过某种方式减少plt.hist的第一个参数中的重复次数和详细程度,我会反复调用pd.notnull(data['A1|2|3'])来删除数据集中的None值?

编辑:似乎重点放在绘图上,但我只是为了举例而使用它 - 我实际上想学习如何更好地处理这些数据框。

2 个答案:

答案 0 :(得分:1)

您需要Using the HTTP Cookie Manager in JMeter,这似乎省略None s:

#specify columns for plot
cols = ['A1','A2','A4']
data[cols].plot.hist()

DataFrame.hist

编辑:

有问题需要单独使用列,因此一个可能的解决方案是list comprehension graph

cols = ['A1','A2','A4']
a = [data[x].dropna() for x in cols]
_ = plt.figure()
_ = plt.hist(a,label=cols)
_ = plt.legend()
_ = plt.show()

dropna

答案 1 :(得分:1)

试试这个:

In [258]: data.filter(like='A').plot.hist()
Out[258]: <matplotlib.axes._subplots.AxesSubplot at 0x10e280b8>

结果:

enter image description here

<强>更新

In [266]: data.filter(like='A').plot.hist(width=0.5)
Out[266]: <matplotlib.axes._subplots.AxesSubplot at 0x11f7b518>

结果:

enter image description here

您可能需要阅读great Pandas visualization docs