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


相关文章
|
2月前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
104 0
|
4月前
|
机器学习/深度学习 数据处理 Python
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
129 1
|
9天前
|
存储 数据挖掘 数据处理
Python Pandas入门:行与列快速上手与优化技巧
Pandas是Python中强大的数据分析库,广泛应用于数据科学和数据分析领域。本文为初学者介绍Pandas的基本操作,包括安装、创建DataFrame、行与列的操作及优化技巧。通过实例讲解如何选择、添加、删除行与列,并提供链式操作、向量化处理、索引优化等高效使用Pandas的建议,帮助用户在实际工作中更便捷地处理数据。
20 2
|
4月前
|
数据采集 数据挖掘 Python
Python:pandas做爬虫
Python:pandas做爬虫
48 0
|
2月前
|
数据采集 数据可视化 数据处理
Python数据科学:Pandas库入门与实践
Python数据科学:Pandas库入门与实践
|
2月前
|
机器学习/深度学习 数据采集 数据可视化
Python数据科学实战:从Pandas到机器学习
Python数据科学实战:从Pandas到机器学习
|
2月前
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
57 2
|
2月前
|
数据采集 数据可视化 数据处理
如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`)
本文介绍了如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`),加载历史数据,计算均线和其他技术指标,实现交易逻辑,记录和可视化交易结果。示例代码展示了如何根据均线交叉和价格条件进行开仓、止损和止盈操作。实际应用时需注意数据质量、交易成本和风险管理。
108 5
|
2月前
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
68 2
|
2月前
|
数据采集 数据可视化 数据挖掘
Python数据分析:Pandas库实战指南
Python数据分析:Pandas库实战指南