pandas的基础

一个好的机器学习者,首先是一个更好的数据分析者,对于数据分析而言,一个很好用的开源库可以说是pandas库了。而pandas则是基于numpy,再开发的。学好pandas,走遍天下都不怕。

        对于pandas而言,有三大数据结构,其中最主要的二个数据结构,分别为series和dataframe, 还有一个为Panel。其实主要说的还是前二种。贴一个学习的链接。https://www.yiibai.com/pandas/python_pandas_data_structures.html#article-start

对于Series而言:

是一维的数据。其实对于series而言,类似于字典,也就是键值对。

因为pandas是建立在numpy之上的,所以有很多的性质,二者是类似的。还是基于几个方面来介绍Series。

一,Series的创建

1)采用默认的索引的方式来创建

2)采用自定义的方式来创建(默认的索引,implicit index;自定义的索引,explicit index)

3)通过字典来创建(通过name来给series数据起名字)

import numpy as np
import pandas as pd
data = pd.Series([1, 2, 3.0, np.nan])
print list(data.items())
print data.index
print data.values
print data
data1 = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
print data1['a'], data1[0]
dic = {'beijing': 100, 'tianjin': 120, 'shanghai': 150}
data2 = pd.Series(dic)
print data2['beijing'], data2[0]
print data2[['beijing', 'shanghai']]

二,基本的操作

1)masking (与numpy类似,可以进行逻辑运算)

2)索引(单个索引,可以通过implicit index进行,也可以通过explicit index进行;对于多个索引,要构建为list之后,统一操作)

3)切片(在使用implicit index时,跟普通的slicing是没有区别的,已经是前闭后开,但利用explicit index的时候,则前闭后闭)

4)自定义的index和内置的index区分度不大,也就是都是整数时,当我们切片的时候,默认用的implicit index,而索引的时候,默认用的是explicit index。

为了避免自己的困惑,我们使用的明确的指示。

对于series.loc[1:3]采用的是explicit index

对于series.iloc[1:3]采用的是implicit index

5)运算

对于二个Series而言,做加减乘除运算的时候,对于相同的index进行运算,不相同的补全为np.nan来进行表示。

可以采用add()函数中的fill_value 来进行缺失值的补全。

对于DataFrame而言:

是多特征数据。下面主要介绍其的二维情况下的应用。

一,DataFrame的创建

1) 利用字典的形式,拼接二个Series来进行

二个Series有公共的index,则合并,没有的话,则拼接,缺失的利用nan来进行补全

DataFrame的index为二个Series的index的并集,columns为拼接Series时字典的名字

import pandas as pd
dic = {'beijing': 100, 'tianjin': 120, 'shanghai': 150}
data = pd.Series(dic)
dic1 = {'beijing': 1, 'tianjin': 2, 'shanghai': 3}
data1 = pd.Series(dic1)
city = pd.DataFrame({'p': data, 'a': data1})
dic2 = {'1': 1, '2': 2, '3': 3}
data2 = pd.Series(dic2)
a = pd.DataFrame({'h': data, 'l': data2})
print city
print city.index
print city.columns
print a
print a.index
print a.columns

 2)根据list of dictionaries来创建

此时没有dictionary的index来作为了dataframe的columns, 我们没有指定index, 默认给了0,1的数字。

import pandas as pd
city = pd.DataFrame([{'beijing': 100, 'tianjin': 120, 'shanghai': 150}, {'beijing': 1, 'tianjin': 2, 'shanghai': 3}])
print city
print city.index
print city.columns

3)利用numpy来创建

此时自己指定index和columns的情况。

import numpy as np
import pandas as pd
a = np.array([[1, 2], [1, 3], [1, 4]])
city = pd.DataFrame(a, index=['a', 'b', 'c'], columns=['1', '2'])
print city
print city.index
print city.columns

 注意注意:对于DataFrame而言,index和columns的名字是不可修改的,修改的话会报错,而对于内含的数据是可以修改的。

index和columns,类似于set, 一般不应该出现相同的元素,若出现相同的元素,进行并或者与运算的时候,可能会出现意想不到的错误,也就是没有办法保证正确性(行为难以预测)。

二, DataFrame的操作

1)转置,(.T)将其row和columns倒转

2)切片和索引

利用iloc,使用的是内置的index,利用loc,使用的是自定义的index,并且,因为DataFrame是二维的情况,所以在进行切片和索引的时候,要考虑二个维度的数据。

同理,使用iloc的时候是前闭后开,使用loc的时候是前闭后闭。

此时注意的一点是:

对于取某一行,不能采用单纯的类似于切片的方法,会报错的。city[0] 错。。但切片的时候利用city[0:2]不会出错,选择的是前二行。

对于单独的取一列,是可以类似用切片的方法来进行的city['b']

3)bool  masking

city[city['2']>1]来选出满足要求列要求的行的情况。

4)运算

对于二个DataFrame的加减乘除而言,也是,相同的columns进行运算,不同的进行nan补全。

同样add()中的fill_value也是可以填充自己想要填充的值

想要进行列的减法或者加法,利用substract()或者add()中,设置axis=0即可。

计算平均值dataframe.stack().mean()

stack(),unstack()方法, 均是对pandas数据进行重排,具体详见:https://www.cnblogs.com/bambipai/p/7658311.html

merge(df1, df2, on=‘*’)用*的列索引来合并二个DataFrame

merge(df1, df2, left_on='*', right_on='**')左边df1采用的*属性,右边df2采用的**属性来进行合并

drop('*', axis=1)丢掉*这一列

5)注意的点

None和nan, 都代表null, 二者均不影响运算,但影响运算速度,对于None, 是Python的object, 包裹了很多层,所以运行速度超级慢,而对于nan, 则是np的对象,是很快的。

在pandas(np)中,若其他值为number,给一个数据赋值为None, 则系统自动改变为nan(not a number)

在pandas(np)中,若其他值不为number, 给一个数据赋值为None, 则系统仍存储为None

利用pandas来读取文件

这是pandas应用的一个很重要的场景

1)read_csv(默认分隔符为逗号,)

2)read_table(默认分隔符为制表符\t)

3)read_excel(读取xlsx文件)

贴一个链接:https://blog.csdn.net/sinat_29957455/article/details/79054126

猜你喜欢

转载自blog.csdn.net/angela2016/article/details/85292578
今日推荐