Python数据分析Pandas
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的信息。
本文地址:https://blog.csdn.net/huo065000/article/details/107068344