利用Pandas处理数据 缺失值的处理 数据库的使用 python-数据描述与分析2

2.利用Pandas处理数据2.1 汇总计算当我们知道如何加载数据后,接下来就是如何处理数据,虽然之前的赋值计算也是一种计算,但是如果Pandas的作用就停留在此,那我们也许只是看到了它的冰山一角,它首先比较吸引人的作用是汇总计算
(1)基本的数学统计计算这里的基本计算指的是sum、mean等操作,主要是基于Series(也可能是来自DataFrame)进行统计计算 。举例如下:
#统计计算 sum mean等import numpy as npimport pandas as pddf=pd.DataFrame(np.arange(16).reshape((4,4)),columns=["aa","bb","cc","dd"],index = ["a","b","c","d"])df#outputaabbccdda0123b4567c891011d12131415df_data = https://www.huyubaike.com/biancheng/df.reindex(["a","b","c","d","e"])df_data#outputaabbccdda0.01.02.03.0b4.05.06.07.0c8.09.010.011.0d12.013.014.015.0eNaNNaNNaNNaNdf_data.sum() #默认是通过列进行求和,即axis=0;默认NaN值也是忽略的#outputaa24.0bb28.0cc32.0dd36.0dtype: float64df_data.sum(axis=1) #默认是通过列进行求和#outputa6.0b22.0c38.0d54.0e0.0dtype: float64df_data.mean(axis=0,skipna=False)#outputaaNaNbbNaNccNaNddNaNdtype: float64## idxmaxidxmin 最大值,最小值的索引print(df.idxmax())print("________________________")print(df.idxmin())#outputaadbbdccdddddtype: object________________________aaabbaccaddadtype: object##进行累计 cumsumprint(df.cumsum())#outputaabbccdda0123b46810c12151821d24283236#对于刚才提到的最大多数描述性统计可以使用describe#对于这些统计量的含义可以查找“help”得到,此处不再赘述df.describe()#outputaabbccddcount4.0000004.0000004.0000004.000000mean6.0000007.0000008.0000009.000000std5.1639785.1639785.1639785.163978min0.0000001.0000002.0000003.00000025%3.0000004.0000005.0000006.00000050%6.0000007.0000008.0000009.00000075%9.00000010.00000011.00000012.000000max12.00000013.00000014.00000015.000000#(2)唯一值、值的计数 。成员资格的设定采用几行代码,一个Output 进行演示#是否是唯一值obj = pd.Series(["a","a","b","b","b","c","c"])print (obj)print (obj.unique())#output0a1a2b3b4b5c6cdtype: object['a' 'b' 'c']【利用Pandas处理数据 缺失值的处理 数据库的使用 python-数据描述与分析2】#value_counts 是python 针对Series进行的顶级操作print (pd.value_counts(obj.values,sort=False))#outputa2b3c2dtype: int64mark = obj.isin(["a"]) #是否存在aprint (mark)#output0True1True2False3False4False5False6Falsedtype: boolobj[mark] #根据判定条件进行数据获取#output0a1adtype: object另外,实际应用中不只是这些统计函数在发挥作用,还有很多统计函数,比如计算数值之间的百分比(pct_change) , 或者是相关数据的系数与协方差等,这里就不讨论了 , 需要时可查看帮助文档来解决 。
2.2 缺失值的处理(1)缺失值的概念缺失值是在数据处理中在所难免的问题 , pandas对缺失值的处理目的是简化对缺失值处理的工作 。缺失值在pandas中使用的是浮点数(numpy.nan:Not a Number) , 具体代码如下:
import numpy as npimport pandas as pddata = https://www.huyubaike.com/biancheng/pd.Series([11,22,33,np.nan,55])#定义NaN 值通过numpy.nandata#output011.0122.0233.03NaN455.0dtype: float64data.isnull()#判定是否为空NaN#output0False1False2False3True4Falsedtype: bool#python中对于None 也认为是NaNdata[2]=Nonedata#output011.0122.02NaN3NaN455.0dtype: float64#(2)过滤缺失值 对于缺失值的过滤主要通过dropna进行 , 如下所示:data.dropna()#过滤NaN值 #接着上面定义的data进行操作#output011.0122.0455.0dtype: float64#当然dropna太过暴力——他会过滤所有的NaN值,这样往往不是一般正常需要的处理结果#我们通过dropna的属性进行限定df = pd.DataFrame(np.arange(16).reshape((4,4)),columns=["aa","bb","cc","dd"],index=["a","b","c","d"])df#outputaabbccdda0123b4567c891011d12131415#制造NaN值df.loc[:1,:]=np.nanprint (df)#output aabbccddaNaNNaNNaNNaNb4.05.06.07.0c8.09.010.011.0d12.013.014.015.0print (df.dropna(axis=1,how="all"))#0行1列#output 并没有发生变化 , 因为过滤的是列,要求一列全都是NaN值#outputaabbccddaNaNNaNNaNNaNb4.05.06.07.0c8.09.010.011.0d12.013.014.015.0df.dropna(axis=0,how="all")#0行1列#outputaabbccddb4.05.06.07.0c8.09.010.011.0d12.013.014.015.0(3)填充缺失值因为数据处理的要求,可能并不需要将所有的数据进行过滤,此时需要对数据进行必要的填充(比如0.0);还可以用线性插值进行必要的填充 , 而在这个数据处理中需要用到的方式如下所示:
df=pd.DataFrame(np.arange(16).reshape((4,4)),columns=["aa","bb","cc","dd"],index = ["a","b","c","d"])dfdf.loc[:1,:] = np.nanprint (df)

推荐阅读