数据分析——pandas

这篇博客介绍了Pandas库的基础知识,包括Series的创建、切片与索引操作,以及DataFrame的构造和基本属性。讲解了如何利用loc和iloc进行数据选取,展示了布尔索引和缺失数据处理的方法。此外,还探讨了Pandas在实际数据分析中的应用,如统计电影数据的平均评分和导演数量。
摘要由CSDN通过智能技术生成

为什么学习pandas

numpy帮助我们处理数值,pandas处理数值之外(基于numpy)还能帮我们处理其他类型的数据。

Series

pandas的Series是一个带标签的数组

创建Series

Series的创建方法有两种,一种是使用list创建,另一种是使用字典创建。

import pandas as pd
import string
#使用list创建Series
t1=pd.Series([1,2,3,4])
#自定义索引
t2=pd.Series([1,2,3,4,5],index=list("abcde"))
print(t2)

#通过字典创建Series
dict={"name":"xiaoming","age":"18","tel":"123456"}
t3=pd.Series(dict)
print(t3)
a={string.ascii_uppercase[i]:i for i in range(10)}  #字典推导式创建一个字典a
print(a)
print(pd.Series(a)) #通过字典创建Series
t4=pd.Series(a,index=list(string.ascii_uppercase[5:15]))
print(t4)   #numpy种nan为float类型,pandas会自动将类型转换为float
print(t4.dtype)
print(t2.astype(int))   #自定义修改Series的dtype
a    1
b    2
c    3
d    4
e    5
dtype: int64
name    xiaoming
age           18
tel       123456
dtype: object
{'A': 0, 'B': 1, 'C': 2, 'D': 3, 'E': 4, 'F': 5, 'G': 6, 'H': 7, 'I': 8, 'J': 9}
A    0
B    1
C    2
D    3
E    4
F    5
G    6
H    7
I    8
J    9
dtype: int64
F    5.0
G    6.0
H    7.0
I    8.0
J    9.0
K    NaN
L    NaN
M    NaN
N    NaN
O    NaN
dtype: float64
float64
a    1
b    2
c    3
d    4
e    5
dtype: int32

Series的切片与索引

切片: 直接传入start end或者步长即可
索引: 一个的时候之间传入序号或者index,多个的时候传入index的列表

import pandas as pd
#通过字典创建Series
dict={"name":"xiaoming","age":"18","tel":"123456"}
t=pd.Series(dict)
print(t)
#根据切片取值
print(t[0])
print(t[0:2])
print(t[[0,2]])
#根据索引取值
print(t["name"])
print(t[["name","tel"]])
#布尔索引取值
t2=pd.Series(range(10))
print(t2[t2>5])
name    xiaoming
age           18
tel       123456
dtype: object
xiaoming
name    xiaoming
age           18
dtype: object
name    xiaoming
tel       123456
dtype: object
xiaoming
name    xiaoming
tel       123456
dtype: object
6    6
7    7
8    8
9    9
dtype: int64

对于一个陌生的Series,我们如何获取它的索引和具体的值呢?

import pandas as pd
#通过字典创建Series
dict={"name":"xiaoming","age":"18","tel":"123456"}
t=pd.Series(dict)
print(t)
print(t.index)
print(t.values)
print(type(t.index))
print(type(t.values))
name    xiaoming
age           18
tel       123456
dtype: object
Index(['name', 'age', 'tel'], dtype='object')
['xiaoming' '18' '123456']
<class 'pandas.core.indexes.base.Index'>
<class 'numpy.ndarray'>

Series对象本质上由两个数组构成。
一个数组构成对象的键(index,索引),一个数组构成对象的值(values),键->值

ndarray的很多方法都可可以运用于Series类型,比如argmax,clip
Series具有where方法,但是结果和ndarray不同

pandas读取外部数据

import pandas as pd
pd.read_csv()

pandas之DataFrame

import pandas as pd
import numpy as np
t=pd.DataFrame(np.arange(12).reshape(3,4))
print(t)

在这里插入图片描述

DataFrame对象既有行索引,又有列索引
行索引,表明不同行,横向索引,叫index,0轴,axis=0
列索引,表名不同列,纵向索引,叫columns,1轴,axis=1

import pandas as pd
import numpy as np
import string
t=pd.DataFrame(np.arange(12).reshape(3,4))
print(t)
#DataFrame设置行索引和列索引
#index代表行索引,columns代表列索引
t1=pd.DataFrame(np.arange(12).reshape(3,4),index=list(string.ascii_uppercase[:3]),columns=list(string.ascii_uppercase[-4:]))
print(t1)

DataFrame的基本属性和方法
在这里插入图片描述

pandas之loc

  • df.loc通过标签索引获取行数据
  • df.iloc通过位置获取行数据
import pandas as pd
import numpy as np
import string
t=pd.DataFrame(np.arange(12).reshape(3,4),index=list(string.ascii_uppercase[:3]),columns=list(string.ascii_uppercase[-4:]))
print(t)
print(t.loc["A","W"])   #A行W列的值
print(t.loc["A",["W","Z"]]) #A行 W列和Z列的值
print(type(t.loc["A"]))
#选择间隔的多行多列
print(t.loc[["A","C"],["W","Z"]])
print(t.loc["A":,["W","Z"]])
print(t.loc["A":"C",["W","Z"]]) #冒号在loc里是闭合的,即会取到冒号后面的数据
   W  X   Y   Z
A  0  1   2   3
B  4  5   6   7
C  8  9  10  11
0
W    0
Z    3
Name: A, dtype: int32
<class 'pandas.core.series.Series'>
   W   Z
A  0   3
C  8  11
   W   Z
A  0   3
B  4   7
C  8  11
   W   Z
A  0   3
B  4   7
C  8  11

pandas之iloc

  • df.loc通过标签索引获取行数据
  • df.iloc通过位置获取行数据
import pandas as pd
import numpy as np
import string
t=pd.DataFrame(np.arange(12).reshape(3,4),index=list(string.ascii_uppercase[:3]),columns=list(string.ascii_uppercase[-4:]))
print(t)
print(t.iloc[1:3,1:3])
#赋值更改数据
t.loc["A","Y"]=100
print(t)
t.iloc[1:2,0:2]=666
print(t)
   W  X   Y   Z
A  0  1   2   3
B  4  5   6   7
C  8  9  10  11
   X   Y
B  5   6
C  9  10
   W  X    Y   Z
A  0  1  100   3
B  4  5    6   7
C  8  9   10  11
     W    X    Y   Z
A    0    1  100   3
B  666  666    6   7
C    8    9   10  11

pandas之布尔索引

import pandas as pd
import numpy as np
import string
t=pd.DataFrame(np.arange(12).reshape(3,4),index=list(string.ascii_uppercase[:3]),columns=list(string.ascii_uppercase[-4:]))
print(t)
print(t[t>5])   #不符合条件的被赋值为nan
   W  X   Y   Z
A  0  1   2   3
B  4  5   6   7
C  8  9  10  11
     W    X     Y     Z
A  NaN  NaN   NaN   NaN
B  NaN  NaN   6.0   7.0
C  8.0  9.0  10.0  11.0

缺失数据的处理

判断是否为nan
pd.isnull(df),pd.notnull(df)

nan的处理方法:

  1. 删除nan所在的行或列
    t.dropna (axis=0, how=‘any’, inplace=False)
  2. 填充有意义的数据
    t[“Y”]=t[“Y”].fillna(t[“Y”].mean())

处理为0的数据
t[t==0]=np.nan

import pandas as pd
import numpy as np
import string
t=pd.DataFrame(np.arange(12).reshape(3,4),index=list(string.ascii_uppercase[:3]),columns=list(string.ascii_uppercase[-4:]))
print(t)
print(t[t>5])   #不符合条件的被赋值为nan
t=t[t>5]    #此时t种包含nan
print(t)
print(t[pd.notnull(t["W"])])    #选择t种不包含nan的行数据
#处理方法1:删除nan所在的行或列
#axis表示轴,how参数取值[any,all],any表示包含nan修改,all表示全部为nan才修改,inplace为是否原地修改
t.dropna(axis=0,how='any',inplace=False)
print(t)
#处理方法2:填充有意义的数值
print(t.fillna(0))  #将nan的值修改为0
# print(t.fillna(t.mean()))
t["Y"]=t["Y"].fillna(t["Y"].mean()) #只操作一列
print(t)

实战

假设现在我们有一组从2006年到2016年1000部最流行的电影数据,我们想知道这些电影数据中评分的平均分,导演的人数等信息,我们应该怎么获取?
数据来源:https://www.kaggle.com/damianpanek/sunday-eda/data

import pandas as pd
from matplotlib import pyplot as plt

file_path="./IMDB-Movie-Data.csv"

df=pd.read_csv(file_path)
print(df.head(1))
print(df.info())    #获取简要摘要

#rating,runtime分布情况
#准备图形:直方图
#准备数据

runtime_data=df["Runtime (Minutes)"].values

max_runtime=runtime_data.max()
min_runtime=runtime_data.min()

#计算数组
print(max_runtime-min_runtime)
num_bin=(max_runtime-min_runtime)//5

#设置图形大小
plt.figure(figsize=(20,8),dpi=80)

#设置x轴
plt.xticks(range(min_runtime,max_runtime+5,5))

#画图
plt.hist(runtime_data,num_bin)

plt.show()

在这里插入图片描述

常用统计方法

假设现在我们有一组从2006年到2016年1000部最流行的电影数据,我们想知道这些电影数据中评分的平均分,导演的人数等信息,我们应该怎么获取?
数据来源:https://www.kaggle.com/damianpanek/sunday-eda/data

去重复的方法

import pandas as pd
from matplotlib import pyplot as plt

file_path="./IMDB-Movie-Data.csv"

df=pd.read_csv(file_path)
print(df.head(1))
print(df.info())    #获取简要摘要

#获取平均分
print(df["Rating"].mean())

#获取导演人数
print(len(set(df["Director"].tolist())))    #去除重复
print(len(df["Director"].unique()))  #去除重复

#获取演员人数
temp_actors_list=df["Actors"].str.split(",").tolist()   #类似[['a','b'],['c','d']]的多重列表
actors_list=[i for j in temp_actors_list for i in j]    #两重循环展开
actors_nums=len(set(actors_list))
print(actors_nums)

在这里插入图片描述

数据合并之join

join: 默认情况下他是把行索引相同的数据合并到一起

import pandas as pd
import numpy as np
import string
t1=pd.DataFrame(np.arange(12).reshape(3,4),index=list(string.ascii_uppercase[:3]),columns=list(string.ascii_uppercase[-4:]))
print(t1)
t2=pd.DataFrame(np.arange(12).reshape(2,6),index=list(string.ascii_uppercase[:2]))
print(t2)
print(t1.join(t2))

在这里插入图片描述

数据合并之merge

在这里插入图片描述

### 回答1: Pandas是一个Python库,用于数据处理和分析。在数据分析中,预处理是非常重要的一步,因为它可以帮助我们清洗和转换数据,使其更适合进行分析。Pandas提供了一些强大的预处理功能,包括数据清洗、数据转换、数据重塑和数据合并等。在使用Pandas进行数据分析时,预处理是必不可少的一步。 ### 回答2: 在数据分析中,数据的预处理是一个必要的过程。它的主要目的是清洗数据,准备数据,以便后续分析。在Python中,pandas是一种广泛使用的数据处理库。pandas可以通过其高效的数据结构和操作方法来清洗和处理数据。在本文中,将介绍pandas预处理的一些常见技术。 一、读取数据 在pandas中,使用read_csv()函数读取CSV格式的数据文件,read_excel()函数读取Excel格式的数据文件。它们都有很多选项,可以根据具体文件的格式进行设置。 二、查看数据 在pandas中,使用以下函数来查看数据: 1. head() - 显示数据框的前几行; 2. tail() - 显示数据框的后几行; 3. columns - 显示数据框的列名; 4. shape - 显示数据框的行列数; 5. info() - 显示数据框的基本信息,包括每列的名称、非空值数量和数据类型。 三、数据清洗 在数据清洗中,有以下一些常见的技术: 1. 删除重复行:使用drop_duplicates()函数; 2. 替换空值:使用fillna()函数; 3. 删除空值:使用dropna()函数; 4. 更改数据类型:使用astype()函数。 四、数据准备 在数据准备中,有以下一些常见的技术: 1. 数据合并:使用merge()函数; 2. 数据筛选:使用loc()函数或者iloc()函数; 3. 数据分组:使用groupby()函数; 4. 数据排序:使用sort_values()函数。 五、数据分析数据分析中,有以下一些常见的技术: 1. 数据聚合:使用agg()函数; 2. 统计描述:使用describe()函数; 3. 数据可视化:使用matplotlib或者seaborn库。 综上所述,pandas预处理是数据分析中必不可少的一步。通过使用pandas提供的函数和方法,可以方便地清理和处理数据,使其更容易被分析。 ### 回答3: Pandas是Python中最强大的数据处理库之一,它提供了DataFrame和Series这两种数据结构,可以快速便捷地处理数据。在数据分析过程中,我们往往需要先对数据进行预处理,以便后续的分析。Pandas提供了一系列的方法和函数,可以帮助我们进行数据的预处理。 首先,在进行数据分析之前,我们需要了解自己所面对的数据类型和数据结构。Pandas中的DataFrame结构就是类似于表格的结构,每一行代表一个样本,每一列代表一个属性。Series则是一维的数组结构。通过pandas.read_csv(),我们可以读取CSV格式的数据,并转化为DataFrame结构。 接下来,我们要对数据进行一些基本的处理,例如数据清洗、数据去重、缺失值处理、异常值处理等。在数据清洗过程中,我们往往需要对数据进行一些特殊的处理,例如字符串的分割、合并、替换等操作,Pandas提供了一系列能够对文本进行操作的函数。在数据去重方面,我们可以使用drop_duplicates()函数,它可以去除DataFrame中的重复记录。在处理缺失值时,Pandas提供了一系列的函数,如fillna()函数、dropna()函数,可以方便地将NaN值变为其他有意义的值,或者删除缺失值的行或列。在异常值处理方面,我们可以使用isoutlier()函数来找到数据中的异常值,并进行处理。 在数据预处理完成后,我们可以对数据进行一些统计分析,例如计算小计、计算总计、分位数、极差、方差、标准差等统计指标。我们可以使用describe()函数来获得数据的统计描述,还可以使用groupby()函数来对数据分组,使用agg()函数对每组进行计算统计指标。此外,我们还可以对数据进行排序、丢弃、合并等操作。 总之,Pandas是一个非常强大的Python库,可以轻松处理数据预处理和数据处理方面的任务。Pandas作为数据分析和数据处理的基础库,使用熟练后可以在数据分析中发挥更大的作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值