Jupyter notebook教程系列(六)在Jupyter notebook上学习Pandas

pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

1.1 读取数据(Getting Data In)

CSV文件的读取

#Titanic.csv是一个泰坦尼克号乘客信息数据集,用于做泰坦尼克生还预测。
#有891行,12个属性列(passenger:乘客ID,Survived:是否存活,Pclass:乘客等级,Name:姓名,Sex:性别,Age:年龄,Sibsp:兄弟配偶数,Parch:父母孩子数,Ticket:船票号,Fare:票价,cabin:船舱,Enbarked:登录港口)

图1-1

图1-2

1.2 创建数据(Object Creation)

   自己创建一些数据

1.2.1利用一个列表来生成数据并自动生成对应的索引:

#data是一个列表
data=[1,3,5,np.nan,6,8]
ps = pd.Series(data)
print(ps)

图1-3

1.2.2 通过索引,标签,数据值生成一个 DataFrame

#以‘20130101’为基数,不断加1产生新的索引,periods=生成的索引数目
dates = pd.date_range('20130101', periods=6)
#通过数据生成时间,标签,数据值生成一个 DataFrame
#np.random.randn(6,4)随机生成6行4列的数据,datas为刚才生成的索引,columns为列标签
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

图1-4

1.2.3通过字典生成一个DataFrame

#以‘20130101’为基数,不断加1产生新的索引,periods=生成的索引数目
dates = pd.date_range('20130101', periods=6)
#通过数据生成时间,标签,数据值生成一个 DataFrame
#np.random.randn(6,4)随机生成6行4列的数据,datas为刚才生成的索引,columns为列标签
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

图1-5

1.3 数据可视化

   可以通过这类方法去从各个角度浏览DataFrame,选择其中的值

本节用到的数据如下(dataframe):

图1-6

1.3.1

#查看DataFrame的索引
df.index
#查看所有列标签的名称
df.columns
#查看dataframe的所有值
df.values
#查看datafream各方面的值,(每列属性的)平均值,最大值,最小值,标准差
df.describe()

图1-7

图1-8

1.4 选择数据

选择满足某种特征的数据

本小节用到的数据如下(dataframe):

图1-9

1.4.1 获取数据

选择列数据,选择行数据(两种方法,基于索引,基于位置)

#选择标签A列的数据
df['A']
#选择0到3行(不包括第三行)的数据,这种方法是基于位置的
df[0:3]
#选择索引‘20130102’到索引‘20130104’(包括‘20130104’)之间的数据,基于索引
df['20130102':'20130104']

图1-10

1.4.2 通过标签来选择数据(Selection by Label)

#选择第0行的数据
df.loc[dates[0]]
#选择A,B两列标签的数据
df.loc[:,['A','B']]
#选择索引'20130102','20130104'之间,A,B两列标签的数据
df.loc['20130102':'20130104',['A','B']]

图1-11

1.4.3 通过位置选择数据(Selection by Position)

通过位置选取数据
#选取第三行的数据
df.iloc[3]
#选取3~5行,0~2列的数据(不包含第5行,第2列)
df.iloc[3:5,0:2]
#选取1,2,4行,0,2列的数据
df.iloc[[1,2,4],[0,2]]

图1-12

1.4.4 通过布尔变量来选择数据(Boolean Indexing)

通过布尔索引来选取数据

#df是我们在前面创建的一个6行4列的datafream
#选取A列值大于0的数据 
df[df.A > 0]
#选取所有大于0的数据
df[df > 0]
#增添一列标签E数据
df['E'] = ['one', 'one','two','three','four','three']
#选取E列有值在['two','four']中的数据
df['E'].isin(['two','four'])

图1-13

1.5 改变数据值

     改变数据中某些位置的值

本小节用到的数据如下(dataframe):

图1-14

#将第0行第A列的数据置为0
df.at[dates[0],'A'] = 0
#将0行1列的数据置为0
df.iat[0,1] = 0

1.6 缺失数据的操作(Missing Data)

#删除所有存在缺失值的行数据
df1.dropna(how='any')
#用某个值去补全所有缺失值(下面这句代码是将所有缺失值全部用5来代替)
df1.fillna(value=5)
#显示出所有数据的状态(是否存在缺失值,若为true则说明该位置存在缺失值)
pd.isna(df1)

图1-15

1.7 对数据的一些操作(Operations)

对数据的一些操作(取平均值,排序等等)

本小节用到的数据如下(dataframe):

#求各列的平均值
df.mean()
#求第1列的平均值
df.mean(1)
s = pd.Series(np.random.randint(0, 7, size=10))
#统计各个值的频数
s.value_counts()

图1-16

图1-17

1.8 合并数据(Merge)

合并数据的一些操作

本小节用到的df为两个新生成的df,下面有详细代码及截图。

#生成一个dataframe,np.random.randn(10, 4)生成10行4列,值为随机数的df
df = pd.DataFrame(np.random.randn(10, 4))
#将df的前3行,以及第7行之后的行数据合并生成一个新的dataframe
pd.concat([df[:3],df[7:]])
s = df.iloc[3]
#将s添加在df,位置会在最后一行
df.append(s, ignore_index=True)
#生成两个dataframe:left,right
left = pd.DataFrame({'key': ['foo', 'foo'], 'lval': [1, 2]})
right = pd.DataFrame({'key': ['foo', 'foo'], 'rval': [4, 5]})
#将两个有不同标签的dataframe合并生成新的Dataframe
pd.merge(left, right, on='key')

图1-18

1.9 数据分组(Grouping)

将数据根据某个属性分类。

数据如下(dataframe):

图1-19

#df是我们在前面创建的一个6行4列的datafream

#将数据按照A,B两个标签来分类,A有两个属性值,B有三个属性值,则组合有2*3=6种,即分#为6类

df.groupby(['A','B']).sum()

图1-20

猜你喜欢

转载自blog.csdn.net/dlhlSC/article/details/84300273