数据分析之Pandas从入门到放弃:代码+实战,9分钟带你推开Pandas大门!!!

举报
Carl_奕然 发表于 2023/03/17 15:17:26 2023/03/17
【摘要】 掐着时间,我确实只用来9分钟,就看完了这篇完整。


1. Pandas的基本定义

  • 在数据分析中,Pandas的使用频率很高
  • Pandas可以说是基于NumPy构建的含有更高级数据结构和分析能力的工具包
  • Series和DataFrame是两个核心数据结构,分别代表一维的序列和二维的表结构
  • 基于这两种数据结构,Pandas可以对数据进行导入、清洗、处理、统计和输出

2. Pandas的使用方法


2.1 Series

  • Series是个定长的字典序列
  • 在存储的时候,相当于两个ndarry,这也是和字典结构最大的不同。因为字典结构,元素个数是不固定的
  • Series的两个基本属性:
           ①index
           ②values

举个实例,来看一下 Series的使用方法:

# -*- coding: utf-8 -*-
# auth : carl_DJ
# time : 2020-8-28


from pandas import Series,DataFrame

x1 = Series([1,2,3,4])
x2 = Series(data=[1,2,3,4],index=['a','b','c','d'])
#使用字典来创建
d = {'a':1,'b':2,'c':3,'d':4}
x3=Series(d)
print(f'x1打印的结果是:{x1}' )
print('='*20)
print(f'x2打印的结果是:{x2}')
print('='*20)
print(f'x3打印的结果是:{x3}')


结果如下:

在这里插入图片描述

2.2 DataFrame使用

  • 类似数据库表,包括了行索引和列索引,可以将DataFrame看成是由相同索引的Series组成的字典类型

我们在举个例子:

# -*- coding: utf-8 -*-
# auth : carl_DJ
# time : 2020-8-28


from pandas import DataFrame
data = {
        'Chinese':[66,88,93,11,66],
        'Math':[30,20,40,50,77],
        'English':[65,88,90,55,22]
        }
df1 = DataFrame(data)
df2 = DataFrame(
            data,
            index=['张三','李四','王五','赵刘','贾七'],
            columns=['Chinese','Math','English']
                )

print(f'df1打印的结果是:\n{df1}')
print('='*30)
print(f'df2打印的结果是:\n{df2}')


看一下效果

在这里插入图片描述

2.2.1 删除操作

  • 删除DataFrame的 行与列

实例

#删除行
df2 = df2.drop(columns=['English'])
#删列
df2 = df2.drop(index=['张三'])



运行结果

在这里插入图片描述
2.2.2 去重操作

  • 去掉重复的值
#去掉重复的值
df1 = df1.drop_duplicates()



2.2.3 更改数据格式操作

  • 更改数据格式
#更改数据格式
df2['Chinese'].astype('str')
df2['Chinese'].astype(np.int64)



2.2.4 去掉数据间的空格操作

  • 去掉数据间的空格
#删除数据左右两边的空格
df2['Chinese'] = df2['Chinese'].map(str.split)



2.2.5 大小写转换操作

  • 全部大写
#全部大写转换
df2.columns = df2.columns.str.upper()

  • 全部小写
#全部小写转换
df2.columns = df2.columns.str.lower()

  • 首字母大写
#首字母大写
df2.columns = df2.columns.str.title()



2.2.6 数据清洗

  • 使用apply对数据进行清洗


apply是Pandas中自由度非常高的函数,使用频率非常高。
比如:

  • ① 对Math列的数值进行大小写转换
#对Math列进行大小写转换
df2['Math'] = df2['Math'].apply(str.upper)

  • ②定义函数,在apply中使用
#定义函数,在apply中使用
def par_df(par):
    return par*2

df1['Chinese'] = df1['Chinese'].apply(par_df)



2.3 Pandas中的统计函数


2.3.1 基本数据统计用法

  • count() 统计个数,空值NaN不计算
  • describe() 一次性输出多个统计指标,包括:count, mean, std, min, max等
  • min()最小值
  • max()最大值
  • sum()总和
  • median()中位数
  • var()方差
  • std()标准差
  • argmin() 统计最小值的索引位置
  • argmax()统计最大值的索引位置
  • idxmin() 统计最小值的索引值
  • idxmax() 统计最大值的索引值

2.3.2 函数链接用法

  • inner内连接
#内连接
df3 = pd.merge(df1, df2, how='inner')

  • outer外连接
#外连接
df3 = pd.merge(df1, df2, how='outer')

  • right右连接
#内连接
df3 = pd.merge(df1, df2, how='right')

  • left左连接
#内连接
df3 = pd.merge(df1, df2, how='left')



2.3.3 loc函数及iloc函数的用法

  • loc函数:通过行索引 “Index” 中的具体值来取行数据(如取"Index"为"A"的行)
  • iloc函数:通过行号来取行数据(如取第二行的数据)

老规矩,上代码


示例一:提取行

# -*- coding: utf-8 -*-
# auth : carl_DJ
# time : 2020-8-28
"""
实现功能:
    提取行的数据
"""
from pandas import DataFrame
data = {
        'Chinese':[66,88,93,11,66],
        'Math':[30,20,40,50,77],
        'English':[65,88,90,55,22]
        }
df2 = DataFrame(
            data,
            index=['张三','李四','王五','赵刘','贾七'],
            columns=['Chinese','Math','English']
                )

#提取index为'张三'的行
print(f"loc函数提取index为'张三'的行的内容:\n {df2.loc[u'张三']}")
print("="*30)
#提取第1行内容
print(f"iloc函数提取第1行的内容:\n {df2.iloc[1]}")


运行结果

在这里插入图片描述

示例二:提取列


# -*- coding: utf-8 -*-
# auth : carl_DJ
# time : 2020-8-28
"""
实现功能:
    提取列的数据
"""
from pandas import DataFrame
data = {
        'Chinese':[66,88,93,11,66],
        'Math':[30,20,40,50,77],
        'English':[65,88,90,55,22]
        }
df2 = DataFrame(
            data,
            index=['张三','李四','王五','赵刘','贾七'],
            columns=['Chinese','Math','English']
                )

#提取列为Englis的所有内容
#使用loc函数获取分数
print(f"loc函数提取列为Englis的所有内容:\n {df2.loc[:,['English']]}")

print("="*30)

#提取第2列的所有内容
#使用iloc函数获取分数
print(f"iloc函数提取第2列的所有内容:\n {df2.iloc[:,2]}")



运行结果

在这里插入图片描述


示例三:提取列和行

# -*- coding: utf-8 -*-
# auth : carl_DJ
# time : 2020-8-28


from pandas import DataFrame
data = {
        'Chinese':[66,88,93,11,66],
        'Math':[30,20,40,50,77],
        'English':[65,88,90,55,22]
        }
df2 = DataFrame(
            data,
            index=['zhangsan','lisi','wangwu','zhaoliu','jiaqi'],
            columns=['Chinese','Math','English']
                )
#使用loc函数获取分数
loc_soc = df2.loc[['zhangsan','zhaoliu'],['Chinese','English']]
print(f'zhangsan,zhaoliu的Chinese,English成绩分别是:\n{loc_sco}')

#使用iloc函数获取分数
iloc_sco = df2.iloc[[0,3],[0,2]]
print(f'zhangsan,zhaoliu的Chinese,English成绩分别是:\n{iloc_sco}')



运行结果

在这里插入图片描述

2.4 数据分组

  • group by用法
# -*- coding: utf-8 -*-
# auth : carl_DJ
# time : 2020-8-28


import numpy as np
import pandas as pd

#读取数据csv文件,采用gbk编码格式
data = pd.read_csv('data_info.csv',encoding='gbk')
result = data.groupby('sex').age([np.sum,np.mean])
#打印结果
print(f'结果内容显示为:\n{result}')


2.5 数据排序

  • 排序函数sort_values()
#对A11列从大到小进行排序
df.sort_values('A11', ascending=False)
  • 索引还原reset_index()
'''
reset_index():可以还原索引,重新变为默认的整型索引
inplace = True:不创建新的对象,直接对原始对象进行修改
'''
df.reset_index(inplace=True)



注:
这里的 sort_values 方法类似于 SQL中的order by 用法。

2.6读写文件

  • 读取csv文件
#读取csv文件
pd.read_csv('file_name')

  • 写入csv文件
#写入csv文件,不保存index
pd.to_csv('file_name',index=False)



2.7 合并两个Dataframe


・使用merge通过index来合并Dataframe

#合并两个Dataframe
df2 = df.merge(df2,left_index=True,right_index=True,how='left')

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。