欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python数据分析Pandas

程序员文章站 2023-12-10 19:03:28
Pandas是什么?Pandas是一个强大的分析结构化数据的工具集;它的使用基础是Numpy(提供高性能的矩阵运算);用于数据挖掘和数据分析,同时也提供数据清洗功能Pandas利器DataFrameDataFrame是Pandas中的一个表格型的数据结构,包含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型等),DataFrame即有行索引也有列索引,可以被看做是由Series组成的字典。对DataFrame最直接的理解就是它是一个Excel文件。Series它是一种类似于一维数...

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()

输出结果:
Python数据分析Pandas
对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()

Python数据分析Pandas

# 显示所有的字段名。
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()

Python数据分析Pandas

利用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