python/pandas数据分析(十三)-数据清理、转换、合并,重塑

简介: 合并数据结构pandas.merge 根据一个或多个键将不同DataFrame中的行连接起来。

合并数据结构

pandas.merge 根据一个或多个键将不同DataFrame中的行连接起来。

pandas.concat 沿着一条轴将多个对象堆叠起来

具体可以参考之前专门讲数据合并的章节

索引上的合并

有时,DF中的链接键位于其索引中。left_index=True or right_index=True(or 两个都传入)以说明索引应该被用作链接键

left1=pd.DataFrame({'key':list('abaabc'),'value':range(6)})
right1=pd.DataFrame({'group_val':[3.5,7]},index=['a','b'])
left1
right1

这里写图片描述

这里写图片描述

pd.merge(left1,right1,left_on='key',right_index=True)

这里写图片描述

对于层次化索引也适用

righth=pd.DataFrame(np.arange(12).reshape((6,2)),
                  index=[['Nevada','Nevada','Ohio','Ohio','Ohio','Ohio'],
                  [2001,2000,2000,2000,2001,2002]],
                  columns=['event1','event2'])
righth

这里写图片描述

lefth=pd.DataFrame({'key1':['Ohio','Ohio','Ohio','Nevada','Nevada'],
                   'key2':[2000,2001,2002,2001,2002],
                  'data':np.arange(5.)})
lefth

这里写图片描述

pd.merge(lefth,righth,left_on=['key1','key2'],right_index=True)

这里写图片描述

DataFrame 还有一个更方便的join方法用于实现按索引进行合并,具体可以参考之前写的文章

轴向连接

concat axis=1 列

合并重叠数据

np.where 实现一种矢量化的if-else

np.where(pd.isnull(a),b,a)

重塑(reshape)与轴向转换(pivot)

stack 将数据的列旋转为行
unstack : 将数据的行旋转为列

ldata=pd.DataFrame(np.arange(12).reshape((4,3)),
                  columns=['date','item','value'])
ldata

这里写图片描述

pivoted=ldata.pivot('date','item','value')
pivoted

这里写图片描述

date, item 连个参数分别用作行和列索引的列名,最后一个参数值则用于填充DF.

增加一列:

ldata['value2']=np.random.randn(len(ldata))
ldata

这里写图片描述

如果不带最后一个参数则生成一个带有层次化的列
这里写图片描述

用set_index 创建层次化的索引

unstacked=ldata.set_index(['date','item'])
unstacked

这里写图片描述

unstacked.unstack('item')

就变成了povit
这里写图片描述

移除重复数据

DataFrame中常常出现重复行,如

data1=pd.DataFrame({'k1':['one']*3+['two']*4,
                   'k2':[1,1,2,3,3,4,4]})
data1!

这里写图片描述

DataFrame的duplicated方法返回一个布尔型的Series,表示各行是否是重复行

data1.duplicated()

0    False
1     True
2    False
3    False
4     True
5    False
6     True
dtype: bool

drop_duplicates方法返回一个移除了重复行的DataFrame

data1.drop_duplicates()

这里写图片描述

假设你只想过滤还多了一列v1,想过滤这一列的重复项

data1['v1']=range(7)
data1.drop_duplicates(['k1'])

这里写图片描述

默认保留第一个出现的组合

Map

data3=pd.DataFrame({'food':['bacon','beef','honey ham'],
                   'ounces': [3,2,1]})
data3

这里写图片描述

meat_to_animal={
    'bacon':'pig',
    'beef': 'cow',
    'honey ham':'cow'
}

data3['animal']=data3['food'].map(str.lower).map(meat_to_animal)
data3

这里写图片描述
Series的map方法可以接受一个函数或者含有映射关系的字典型对象

替换值

fillna
map
一次替换一个值

data.replace(-999,np.nan)

一次替换多个值

data.replace([-999,-1000], np.nan)

对不同的值进行不同的替换

data.replace([-999,-1000],[np.nan,0])

传入参数也可以是字典

data.replace({-999:np.nan, -1000:0})

重命名

data.rename(index=str.title,columns=str.upper)

离散化与面元划分

ages=[20,21,22,24,27,21,23,37,31,64,45,41,32]
bins=[18,25,35,60,100]
cats=pd.cut(ages,bins)
cats


[(18, 25], (18, 25], (18, 25], (18, 25], (25, 35], ..., (25, 35], (60, 100], (35, 60], (35, 60], (25, 35]]
Length: 13
Categories (4, object): [(18, 25] < (25, 35] < (35, 60] < (60, 100]]

pandas 返回一个特殊的categorical对象,将其看做一组表示面元名称的字符串。实际上,他含有一个表示不同分类名称的levels数组以及一个座位年龄数据进行标号的labels属性

cats.codes

array([0, 0, 0, 0, 1, 0, 0, 2, 1, 3, 2, 2, 1], dtype=int8)

cats.categories
Index(['(18, 25]', '(25, 35]', '(35, 60]', '(60, 100]'], dtype='object')


pd.value_counts(cats)
(18, 25]     6
(35, 60]     3
(25, 35]     3
(60, 100]    1
dtype: int64

qcut 可以按照样本分位数对数据进行面元分隔。

data5=np.random.randn(1000)# 正态分布
cats=pd.qcut(data,4) #按照4分位进行切割

检测或者过滤异常值

seed( ) 用于指定随机数生成时所用算法开始的整数值,如果使用相同的seed( )值,则每次生成的随即数都相同,如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。

np.random.seed(12345)
data4=pd.DataFrame(np.random.randn(1000,4))
data4.describe()

这里写图片描述

col=data4[3]
col[np.abs(col)>3]

97     3.927528
305   -3.399312
400   -3.745356
Name: 3, dtype: float64

选出绝对值超过3的行

data4[(np.abs(data4)> 3).any(1)]

这里写图片描述

目录
相关文章
|
15天前
|
数据采集 数据可视化 数据挖掘
Pandas数据应用:天气数据分析
本文介绍如何使用 Pandas 进行天气数据分析。Pandas 是一个强大的 Python 数据处理库,适合处理表格型数据。文章涵盖加载天气数据、处理缺失值、转换数据类型、时间序列分析(如滚动平均和重采样)等内容,并解决常见报错如 SettingWithCopyWarning、KeyError 和 TypeError。通过这些方法,帮助用户更好地进行气候趋势预测和决策。
112 71
|
14天前
|
存储 数据采集 数据可视化
Pandas数据应用:电子商务数据分析
本文介绍如何使用 Pandas 进行电子商务数据分析,涵盖数据加载、清洗、预处理、分析与可视化。通过 `read_csv` 等函数加载数据,利用 `info()` 和 `describe()` 探索数据结构和统计信息。针对常见问题如缺失值、重复记录、异常值等,提供解决方案,如 `dropna()`、`drop_duplicates()` 和正则表达式处理。结合 Matplotlib 等库实现数据可视化,探讨内存不足和性能瓶颈的应对方法,并总结常见报错及解决策略,帮助提升电商企业的数据分析能力。
115 73
|
11天前
|
存储 数据采集 数据可视化
Pandas数据应用:医疗数据分析
Pandas是Python中强大的数据操作和分析库,广泛应用于医疗数据分析。本文介绍了使用Pandas进行医疗数据分析的常见问题及解决方案,涵盖数据导入、预处理、清洗、转换、可视化等方面。通过解决文件路径错误、编码不匹配、缺失值处理、异常值识别、分类变量编码等问题,结合Matplotlib等工具实现数据可视化,并提供了解决常见报错的方法。掌握这些技巧可以提高医疗数据分析的效率和准确性。
54 22
|
4天前
|
存储 数据挖掘 数据处理
Python Pandas入门:行与列快速上手与优化技巧
Pandas是Python中强大的数据分析库,广泛应用于数据科学和数据分析领域。本文为初学者介绍Pandas的基本操作,包括安装、创建DataFrame、行与列的操作及优化技巧。通过实例讲解如何选择、添加、删除行与列,并提供链式操作、向量化处理、索引优化等高效使用Pandas的建议,帮助用户在实际工作中更便捷地处理数据。
13 2
|
2月前
|
存储 机器学习/深度学习 数据可视化
数据集中存在大量的重复值,会对后续的数据分析和处理产生什么影响?
数据集中存在大量重复值可能会对后续的数据分析和处理产生多方面的负面影响
136 56
|
15天前
|
数据采集 数据可视化 索引
Pandas数据应用:股票数据分析
本文介绍了如何使用Pandas库进行股票数据分析。首先,通过pip安装并导入Pandas库。接着,从本地CSV文件读取股票数据,并解决常见的解析错误。然后,利用head()、info()等函数查看数据基本信息,进行数据清洗,处理缺失值和重复数据。再者,结合Matplotlib和Seaborn进行数据可视化,绘制收盘价折线图。最后,进行时间序列分析,设置日期索引、重采样和计算移动平均线。通过这些步骤,帮助读者掌握Pandas在股票数据分析中的应用。
50 5
|
27天前
|
数据采集 监控 数据挖掘
常用电商商品数据API接口(item get)概述,数据分析以及上货
电商商品数据API接口(item get)是电商平台上用于提供商品详细信息的接口。这些接口允许开发者或系统以编程方式获取商品的详细信息,包括但不限于商品的标题、价格、库存、图片、销量、规格参数、用户评价等。这些信息对于电商业务来说至关重要,是商品数据分析、价格监控、上货策略制定等工作的基础。
|
2月前
|
数据采集 数据可视化 数据处理
Python数据科学:Pandas库入门与实践
Python数据科学:Pandas库入门与实践
|
2月前
|
机器学习/深度学习 数据采集 数据可视化
Python数据科学实战:从Pandas到机器学习
Python数据科学实战:从Pandas到机器学习
|
2月前
|
数据采集 数据可视化 数据挖掘
Python数据分析:Pandas库实战指南
Python数据分析:Pandas库实战指南