Python数据分析(一)-Pandas「1」

Pandas是什么?

Pandas是一个强大的分析结构化数据的工具集;它的使用基础是Numpy(提供高性能的矩阵运算);用于数据挖掘和数据分析,同时也提供数据清洗功能

Pandas利器

  • DataFrame
    DataFrame是Pandas中的一个表格型的数据结构,包含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型等),DataFrame即有行索引也有列索引,可以被看做是由Series组成的字典。
    对DataFrame最直接的理解就是它是一个Excel文件。
  • Series
    它是一种类似于一维数组的对象,是由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据也可产生简单的Series对象。
  • DataFram和Series的关系
    DataFrame的一列就是Series,Series转为dataframe可以采用函数to_frame.

Pandas使用demo

所需资源:College.csv资源

import pandas as pd
import numpy as np
from IPython.display import display
# (对jupyter行数的一个设置)默认情况下,一个cell的显示行列存在数量限制。数据集过大时,中间部分数据会以省略号显示。如果想增减或不做数量限制,可通过设置pd.options.display.max_rows/max_columns以达到目的。
pd.options.display.max_columns = 50
# 直接将文件放于同一个路径下,若其他路径,需写相对路径
college = pd.read_csv('College.csv')
# 默认展示行数为5行
college.head()

输出结果:
在这里插入图片描述
对header的基本设置

import pandas as pd
import numpy as np
# 设置header为中文.注意:若设置names要设置完整,不然则是从后往前设置部分。
#对于iris.csv直接从网上获取下载就好,有好多资源
iris_data=pd.read_csv('iris.csv',header=0,
                     names=["花萼长度","花萼宽度","花瓣长度","花瓣宽度","类别"],
                     encoding='gbk');
# 设置显示最大行数,为5行。其实head()默认显示行数也是5
pd.set_option("display.max_rows",5)
iris_data.head()

# 想为college中的header设置中文名,但是因为字段太多,只设置了两个,看结果则明白,其设置是从后往前设置的。
college_data=pd.read_csv('college.csv',header=0,names=["大学","排名"],
                        encoding='gbk')
# pd.set_option("display.max_rows",5)
college_data.head()

在这里插入图片描述

# 显示所有的字段名。
columns=college.columns
columns

//输出结果:
Index(['Name', 'Private', 'Apps', 'Accept', 'Enroll', 'Top10perc', 'Top25perc',
       'F.Undergrad', 'P.Undergrad', 'Outstate', 'Room.Board', 'Books',
       'Personal', 'PhD', 'Terminal', 'S.F.Ratio', 'perc.alumni', 'Expend',
       'Grad.Rate'],
      dtype='object')

iloc和loc的区别

  • loc
    loc是select by label(name)
    loc函数是选择dataframe中那一行的index == k的
  • iloc
    iloc是select by position
    iloc函数是选择dataframe中第position行
# 选择数据子集
# loc是select by position,loc函数是选择dataframe中第position行,可以无任何顺序
s=college.iloc[:,[4,8,2]].head()
# loc是select by label(name),loc函数是选择dataframe中那一行的index == k的,可以无任何顺序
s1=college.loc[:,['PhD','Books','Enroll']]
print(s.head())
# print(s1.head()),最后的一次输出可以不用print
s1.head()

在这里插入图片描述

利用loc实现基本赋值

正常返回结果:
花萼长度 花萼宽度 花瓣长度 花瓣宽度 类别
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa

通过loc可以对某一个值,某一行或者某一列的数据进行重新赋值

# 建立数据副本,以便多次修改
DataFrame=iris_data[:5].copy()
# 修改第0行类别标签列的数据
DataFrame.loc[1,"类别"]="新类别名"
print(DataFrame)

# 建立数据副本,以便多次修改
DataFrame = iris_data[:5].copy() 
# 修改第1行的数据
DataFrame.loc[1]="新数据"
print(DataFrame)

# 建立数据副本,以便多次修改
DataFrame = iris_data[:5].copy() 
# 修改第1列的数据
DataFrame.loc[:,"花萼长度"]=10
print(DataFrame)

//输出结果(一一对应)

  花萼长度  花萼宽度  花瓣长度  花瓣宽度      类别
1   5.1   3.5   1.4   0.2    新类别名
2   4.9   3.0   1.4   0.2  setosa
3   4.7   3.2   1.3   0.2  setosa
4   4.6   3.1   1.5   0.2  setosa
5   5.0   3.6   1.4   0.2  setosa

  花萼长度 花萼宽度 花瓣长度 花瓣宽度      类别
1  新数据  新数据  新数据  新数据     新数据
2  4.9    3  1.4  0.2  setosa
3  4.7  3.2  1.3  0.2  setosa
4  4.6  3.1  1.5  0.2  setosa
5    5  3.6  1.4  0.2  setosa

   花萼长度  花萼宽度  花瓣长度  花瓣宽度      类别
1    10   3.5   1.4   0.2  setosa
2    10   3.0   1.4   0.2  setosa
3    10   3.2   1.3   0.2  setosa
4    10   3.1   1.5   0.2  setosa
5    10   3.6   1.4   0.2  setosa

iloc获取部分数据,左闭右开原则

正常返回前五行的结果:
花萼长度 花萼宽度 花瓣长度 花瓣宽度 类别
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa

# iloc中括号,是左闭右开 1:3则是第一行和第二行,不包括第三行
# 获取第一行,第二行的第一列数值,会打印出索引号
DataFrame.iloc[1:3,1]

# 获取第一行,第二行的数据,第一列第二列的数据
DataFrame.iloc[1:3,1:3]

# 前三行前三列
DataFrame.iloc[:3,:3]

# 0,1,3行的第一列,和最开始的获取是一样的,无顺序之分,写哪列获取哪列
DataFrame.iloc[[0,1,3],1]

# 获取1,3,4行,切记:使用TrueFalse方式,必须把所有列都获取完整,不想要的都用False表示,不然则会报错:
# Item wrong length 4 instead of 5.(本来有5列,结果告诉你就表示了4列,不完整,哈哈哈)
DataFrame.iloc[[True, False, True,True,False]] 


//输出结果(一一对应)

2    3.0
3    3.2
Name: 花萼宽度, dtype: float64

	花萼宽度	花瓣长度
2	3.0	1.4
3	3.2	1.3

	花萼长度	花萼宽度	花瓣长度
1	10	3.5	1.4
2	10	3.0	1.4
3	10	3.2	1.3

1    3.5
2    3.0
4    3.1
Name: 花萼宽度, dtype: float64

	花萼长度	花萼宽度	花瓣长度	花瓣宽度	类别
1	10	3.5	1.4	0.2	setosa
3	10	3.2	1.3	0.2	setosa
4	10	3.1	1.5	0.2	setosa

loc实现条件检索

正常返回前五行的结果:
花萼长度 花萼宽度 花瓣长度 花瓣宽度 类别
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa

# 筛选:花萼长度一列的值都大于4
s1=DataFrame.loc[DataFrame["花萼长度"]>4]
s1

# 筛选:花萼长度大于等于5.0且花瓣长度大于等于1.4的
s2=DataFrame.loc[(DataFrame["花萼长度"]>=5.0) & (DataFrame["花瓣长度"]>=1.4)]
s2


//输出结果(一一对应)

全部返回,因为花萼长度无小于4的

	花萼长度	花萼宽度	花瓣长度	花瓣宽度	类别
1	5.1	3.5	1.4	0.2	setosa
5	5.0	3.6	1.4	0.2	setosa

set_index()

2020年07月01日17:50:55第一次理解:

# index.tolist直接获取索引,然后整合成list
index=college.iloc[[60,99,3]].index.tolist()
print(index)
# college=college.set_index("Name")或者加上drop=True,此两种写法只能执行一次,再次执行会提示None of ['Name'] are in the columns
# set_index 设置索引
college=college.set_index("Name",drop=False)
index2=college.iloc[[60,99,3]].index.tolist()
print(index2)

//第一遍执行结果:
[60, 99, 3]
['Bowdoin College', 'Centenary College of Louisiana', 'Agnes Scott College']

//第二遍执行结果:
['Bowdoin College', 'Centenary College of Louisiana', 'Agnes Scott College']
['Bowdoin College', 'Centenary College of Louisiana', 'Agnes Scott College']

主要原因则是set_index将Name设置成了索引值,所以当第二次执行的时候,则也会显示Name的信息。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章