2.利用Pandas处理数据
2.1 汇总计算
当我们知道如何加载数据后,接下来就是如何处理数据,虽然之前的赋值计算也是一种计算,但是如果Pandas的作用就停留在此,那我们也许只是看到了它的冰山一角,它首先比较吸引人的作用是汇总计算
(1)基本的数学统计计算
这里的基本计算指的是sum、mean等操作,主要是基于Series(也可能是来自DataFrame)进行统计计算。举例如下:
#统计计算 sum mean等 import numpy as np import pandas as pd df=pd.DataFrame(np.arange(16).reshape((4,4)),columns=["aa","bb","cc","dd"],index = ["a","b","c","d"]) df
#output aa bb cc dd a 0 1 2 3 b 4 5 6 7 c 8 9 10 11 d 12 13 14 15
df_data = df.reindex(["a","b","c","d","e"]) df_data
#output aa bb cc dd a 0.0 1.0 2.0 3.0 b 4.0 5.0 6.0 7.0 c 8.0 9.0 10.0 11.0 d 12.0 13.0 14.0 15.0 e NaN NaN NaN NaN
df_data.sum() #默认是通过列进行求和,即axis=0;默认NaN值也是忽略的
#output aa 24.0 bb 28.0 cc 32.0 dd 36.0 dtype: float64
df_data.sum(axis=1) #默认是通过列进行求和
#output a 6.0 b 22.0 c 38.0 d 54.0 e 0.0 dtype: float64
df_data.mean(axis=0,skipna=False)
#output aa NaN bb NaN cc NaN dd NaN dtype: float64
## idxmax idxmin 最大值,最小值的索引 print(df.idxmax()) print("________________________") print(df.idxmin())
#output aa d bb d cc d dd d dtype: object ________________________ aa a bb a cc a dd a dtype: object
##进行累计 cumsum print(df.cumsum())
#output aa bb cc dd a 0 1 2 3 b 4 6 8 10 c 12 15 18 21 d 24 28 32 36
#对于刚才提到的最大多数描述性统计可以使用describe #对于这些统计量的含义可以查找“help”得到,此处不再赘述 df.describe()
#output aa bb cc dd count 4.000000 4.000000 4.000000 4.000000 mean 6.000000 7.000000 8.000000 9.000000 std 5.163978 5.163978 5.163978 5.163978 min 0.000000 1.000000 2.000000 3.000000 25% 3.000000 4.000000 5.000000 6.000000 50% 6.000000 7.000000 8.000000 9.000000 75% 9.000000 10.000000 11.000000 12.000000 max 12.000000 13.000000 14.000000 15.000000
#(2)唯一值、值的计数。成员资格的设定 采用几行代码,一个Output 进行演示 #是否是唯一值 obj = pd.Series(["a","a","b","b","b","c","c"]) print (obj) print (obj.unique())
#output 0 a 1 a 2 b 3 b 4 b 5 c 6 c dtype: object ['a' 'b' 'c']
#value_counts 是python 针对Series进行的顶级操作 print (pd.value_counts(obj.values,sort=False))
#output a 2 b 3 c 2 dtype: int64
mark = obj.isin(["a"]) #是否存在a print (mark)
#output 0 True 1 True 2 False 3 False 4 False 5 False 6 False dtype: bool
obj[mark] #根据判定条件进行数据获取
#output 0 a 1 a dtype: object
另外,实际应用中不只是这些统计函数在发挥作用,还有很多统计函数,比如计算数值之间的百分比(pct_change),或者是相关数据的系数与协方差等,这里就不讨论了,需要时可查看帮助文档来解决。
2.2 缺失值的处理
(1)缺失值的概念
缺失值是在数据处理中在所难免的问题,pandas对缺失值的处理目的是简化对缺失值处理的工作。缺失值在pandas中使用的是浮点数(numpy.nan:Not a Number),具体代码如下:
import numpy as np import pandas as pd data = pd.Series([11,22,33,np.nan,55]) #定义NaN 值通过numpy.nan data
#output 0 11.0 1 22.0 2 33.0 3 NaN 4 55.0 dtype: float64
data.isnull() #判定是否为空NaN
#output 0 False 1 False 2 False 3 True 4 False dtype: bool
#python中对于None 也认为是NaN data[2]=None data
#output 0 11.0 1 22.0 2 NaN 3 NaN 4 55.0 dtype: float64
#(2)过滤缺失值 对于缺失值的过滤主要通过dropna进行,如下所示: data.dropna() #过滤NaN值 #接着上面定义的data进行操作
#output 0 11.0 1 22.0 4 55.0 dtype: float64
#当然dropna太过暴力——他会过滤所有的NaN值,这样往往不是一般正常需要的处理结果 #我们通过dropna的属性进行限定 df = pd.DataFrame(np.arange(16).reshape((4,4)),columns=["aa","bb","cc","dd"],index=["