「Python」Pandas-DataFrame的相关操作一

简介: pandas是为解决数据分析任务而创建的

「Python」Pandas-DataFrame的相关操作一


pandas是为解决数据分析任务而创建的

引入:

from pandas import Series,DataFrame
import pandas as pd

类型简介:

  • Series: 一维数组,类似于Python中的基本数据结构list,区别是Series只允许存储相同的数据类型,这样可以更有效的使用内存,提高运算效率。就像数据库中的列数据;


  • DataFrame: 二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器;


  • Panel:三维的数组,可以理解为DataFrame的容器。


1. Series


Series的创建

In [1]:obj=Series([4,7,-5,3])
In [2]:obj
Out[2]:
0 4
1 7
2 -5
3 3
'''
Series的交互式显示的字符串表示形式是索引在左边,值在右边。因为我们没有给数据指定索引,一个包含整数0到N-1这里N是数据的长度)的默认索引被创建。你可以分别的通过它的values和index属性来获取 Series的数组表示和索引对象:
'''
obj.values # [4,7,-5,3]) 获取值
obj.index # [0,1,2,3] 获取索引

指定Series的索引

# 创建series对象
obj2=Series([4,7,-5,3],index=['d','b','a','c'])
Out:
d 4
b 7
a -5
c 3
# 可以传进来字典然后创建series
In [7]:sdata={'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}
In [8]:obj3=Series(sdata)
In [9]:obj3
Out[9]:
Ohio   35000
Texas  71000
Oregon 16000
Utah   5000


2. DataFrame


DataFrame既有行索引还有列索引,它有一组有序的列,每列既可以是不同类型(数值、字符串、布尔型)的数据,或者可以看做由Series组成的字典。

读取excel

data = pd.read_excel('1、第3章 数据整理与显示.xls',None)  
# None表示一个文件中的多个表一起读取  sheet_name=1 取第一个表  skiprows=2 跳过的行数
sheets = data.keys() # 所有的表名
# 取出每一个表
sheet1_satisfication = data['满意度']
sheet2_wage = data['工资']

按照某一列分类汇总分组统计


目标:统计每个工资值有多少人

s2 = sheet2_wage.groupby('工资').count()
s2.columns = ['频数']
sheet1_satisfication.groupby(['代码','满意度']).count()  
# 这里会有多重索引  df.index返回的是 [('xxx','xx')...]

第一个图为原始数据,第二个图为分类汇总后的结果

1.png

1.png

分组区间统计


目标:统计不同区间工资段的总人数

# 区间的下限
bins = [0,2500,4000,5500,7000,8500,10000,1000000]
# 区间段的标签
labels = ['2500以下','2500-4000','4000-5500','5500-7000','7000-8500','8500-10000','10000以上']
df2 = pd.cut(sheet2_wage['工资'],bins,right=False,labels=labels)
df2 = pd.DataFrame(df2.value_counts(sort=False))  
# sort=False 防止2500以下跑到中间去.(buzhi
df2.columns = ['人数'] # 改变一下列名
df2.loc['总计'] = df2['人数'].agg('sum') # 将总计添加到最后一行
df2

bins的最大值是根据数据决定的,最后分类的结果:

1.png

一列中的3个不同值变为三列(0-1标签)


目标:将同一列的不同值转化为多列,并用0/1标签表示。


用例1: 这里实现的是:将产地的三种编码值(1,2,3)转化为三列

origin = dataset.pop('产地')  # df.pop() 返回这一列并从df中删除
dataset['美国'] = (origin == 1) * 1.0
dataset['欧洲'] = (origin == 2) * 1.0
dataset['日本'] = (origin == 3) * 1.0

原始数据与实现效果如下:

1.png

1.png

用例2:将一个列中包含多种类别的,转化为多列,且变为0-1标签

目标效果:

1.png

1.png

实现代码:

import pandas as pd
df = pd.DataFrame({"适用场所":
                        ["日常,约会,情趣,商务,party,旅行",
      "日常,约会,party,运动,旅行",
      "日常,约会,商务,party,旅行" ]})
from collections import Counter
# 通过逗号分割,并结合Counter将多种类划分为一个列表
data = pd.DataFrame(df.适用场所.str.split(",").apply(Counter).to_list()) 
# 没有该类别的就直接填充0
data = data.fillna(0).astype("int8")
# 最后统计一下该行有多少种类别
data["适用场所"] = data.sum(axis=1)

列转行


就是使用stack()或者melt函数实现。

目标效果

1.png

1.png

4种方法实现:

df = pd.DataFrame({'姓名': ['A','B','C'],
                   '英语':[90,60,70],
                   '数学':[80,98,80],
                   '语文':[85,90,75]})
# 方法1:
tmp=pd.melt(df,id_vars='姓名',var_name='科目',value_name='分数')
# 方法2:
tmp=df.set_index(['姓名']).stack().reset_index() # reset_index()重置索引
tmp.columns=['姓名','科目','分数']
# 方法3:
tmp=df.set_index(['姓名']).stack()
tmp.index.names=['姓名','科目']
tmp.reset_index(name='分数')
# 方法4:
tmp=df.set_index(['姓名']).stack()
tmp2=tmp.rename_axis(index=['姓名','科目'])
tmp2.name='分数'
tmp2.reset_index()

pd.melt()方法详解:

pd.melt()
frame: 需要处理的数据帧
id_vars: 不需要做列转行处理的字段,如果不设置该字段则默认会对所有列进行处理
value_vars: 需要做列转行的字段,不指定则不处理
var_name: 列转行处理后,生成字段列,对列转行之前的字段名称进行重命名
value_name: 列转行处理后,生成数值列,对列转行之前的数值进行命名
col_level: 指定具体的列名等级,通常在有多级列名时使用。

行转列


就是上一个列转行的方向效果。


目标效果:

1.png

1.png

三种方式实现: unstack或者df.pivot

# 方法一
df.pivot(index='姓名',columns='科目',values='分数').rename_axis(columns=None).reset_index()
# 方法二
tmp2=df.set_index(['姓名','科目'])['分数'].unstack()   
# unstack是将多重索引形式的数据,转换为标准表格形式的数据
tmp2.rename_axis(columns=None).reset_index()
''' unstack()两个重要参数
level :要取消堆叠的索引级别,可以传递级别名称 。默认参数为-1,例子中为科目,即最后一个索引
fill_value :如果取消堆叠后有缺失数据,会以固定字符进行填充。
'''
# 方法三
df=tmp.set_index(['姓名','科目'])['分数'].unstack()
df.columns.name=None
df=df.reset_index()


相关文章
|
6天前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
24 0
|
2月前
|
数据采集 数据挖掘 数据处理
使用Python和Pandas进行数据分析基础
使用Python和Pandas进行数据分析基础
56 5
|
2月前
|
机器学习/深度学习 数据处理 Python
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
65 0
|
2月前
|
数据采集 数据挖掘 Python
Python:pandas做爬虫
Python:pandas做爬虫
31 0
|
9天前
|
数据采集 数据可视化 数据处理
如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`)
本文介绍了如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`),加载历史数据,计算均线和其他技术指标,实现交易逻辑,记录和可视化交易结果。示例代码展示了如何根据均线交叉和价格条件进行开仓、止损和止盈操作。实际应用时需注意数据质量、交易成本和风险管理。
28 5
|
7天前
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
20 1
|
28天前
|
机器学习/深度学习 数据采集 算法
探索Python科学计算的边界:NumPy、Pandas与SciPy在大规模数据分析中的高级应用
【10月更文挑战第5天】随着数据科学和机器学习领域的快速发展,处理大规模数据集的能力变得至关重要。Python凭借其强大的生态系统,尤其是NumPy、Pandas和SciPy等库的支持,在这个领域占据了重要地位。本文将深入探讨这些库如何帮助科学家和工程师高效地进行数据分析,并通过实际案例来展示它们的一些高级应用。
42 0
探索Python科学计算的边界:NumPy、Pandas与SciPy在大规模数据分析中的高级应用
|
1月前
|
机器学习/深度学习 并行计算 大数据
【Python篇】深入挖掘 Pandas:机器学习数据处理的高级技巧
【Python篇】深入挖掘 Pandas:机器学习数据处理的高级技巧
54 3
|
1月前
|
数据采集 数据挖掘 大数据
【Python篇】详细学习 pandas 和 xlrd:从零开始
【Python篇】详细学习 pandas 和 xlrd:从零开始
53 2
|
1月前
|
数据采集 数据挖掘 API
Python数据分析加速器:深度挖掘Pandas与NumPy的高级功能
在Python数据分析的世界里,Pandas和NumPy无疑是两颗璀璨的明星,它们为数据科学家和工程师提供了强大而灵活的工具集,用于处理、分析和探索数据。今天,我们将一起深入探索这两个库的高级功能,看看它们如何成为数据分析的加速器。
37 1