Python数据分析——numpy与pandas数据合并

简介: 代码如下
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
# Numpy数据合并
arr = np.random.randint(0,10,(3,3))
arr
# concatenate((a1, a2, ...), axis=0, out=None)
np.concatenate((arr,arr)) # 默认axis = 0,按列
np.concatenate((arr,arr),axis = 1)# 按行
data = {i : [a for a in range(2)] for i in ["A","B"]}
data
# 声明一个函数,可以动态创建DataFrame
def mk_df(cols,indx):
    data = {c : [c + str(i) for i in indx] for c in cols}
    #print(data)
    return DataFrame(data, columns = cols, index = indx)
mk_df(["A", "B"],[1, 2, 3])
#  pandas处理多组数据的时候往往会要用到数据的合并处理,其中有三种方式,concat、append和merge。
#  用concat是一种基本的合并方式。而且concat中有很多参数可以调整,合并成你想要的数据形式。axis来指明合并方向。axis=0是预设值,因此未设定任何参数时,函数默认axis=0。(0表示上下合并,1表示左右合并)
#   append只有纵向合并,没有横向合并。
#  根据两组数据中的关键字key来合并(key在两组数据中是完全一致的)。
# 使用concat合并DataFrame
# pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=None, copy=True)
  #  concat函数是在pandas下的方法,可以将数据根据不同的轴作简单的融合
#  objs: series,dataframe或者是panel构成的序列list
#  axis: 需要合并链接的轴,0是行,1是列 
#  join:连接的方式 inner,或者outer
#  objs:Series,DataFrame或Panel对象的序列或映射。如果传递了dict,则排序的键将用作键参数,除非它被传递,在这种情况下,将选择值(见下文)。任何无对象将被静默删除,除非它们都是无,在这种情况下将引发一个ValueError。
#  axis:{0,1,...},默认为0。沿着连接的轴。
#  join:{'inner','outer'},默认为“outer”。如何处理其他轴上的索引。outer为联合和inner为交集。
#  ignore_index:boolean,default False。如果为True,请不要使用并置轴上的索引值。结果轴将被标记为0,...,n-1。如果要连接其中并置轴没有有意义的索引信息的对象,这将非常有用。注意,其他轴上的索引值在连接中仍然受到尊重。
#  join_axes:Index对象列表。用于其他n-1轴的特定索引,而不是执行内部/外部设置逻辑。
#  keys:序列,默认值无。使用传递的键作为最外层构建层次索引。如果为多索引,应该使用元组。
#  levels:序列列表,默认值无。用于构建MultiIndex的特定级别(唯一值)。否则,它们将从键推断。
#  names:list,default无。结果层次索引中的级别的名称。
#  verify_integrity:boolean,default False。检查新连接的轴是否包含重复项。这相对于实际的数据串联可能是非常昂贵的。
#  copy:boolean,default True。如果为False,请勿不必要地复制数据。
d1 = mk_df(["A","B"],[0,1])
d2 = mk_df(["A","B"],[1,2])
display(d1,d2)
pd.concat((d1,d2))# 默认axis=0
pd.concat((d1,d2), axis = 1)# 按行,没意义
# 合并时,索引可以重复
d3 = mk_df(["A","B"],[1,1,2])
d4 = mk_df(["A","B"],[1,2,3])
display(d3,d4)
pd.concat((d3,d4))
# 索引可以重置
pd.concat((d3,d4),ignore_index = True)
# 列名不一致,也可以合并,默认外连接,类似数据库中的全外连接
d1 = mk_df(["A","B"],[1,3])
d2 = mk_df(["B","C"],[2,4])
display(d1,d2)
pd.concat((d1,d2))
# 设置join属性,实现内连接
pd.concat((d1,d2),join = "inner")
# join_axes,可以指定以那个DataFrame的索引为准,类似数据库中左右连接
d3 = mk_df(["A","C","D"],[0,2,4])
d4 = mk_df(["C","D","E"],[3,6,9])
display(d3,d4)
pd.concat((d3,d4))
# 以d3的列为标准,没能匹配项被NaN
pd.concat((d3,d4),join_axes = [d3.columns])
#以d4的列为标准,没能匹配项被NaN
pd.concat((d3,d4),join_axes = [d4.columns])
# append,直接追加到末尾
d1 = mk_df(["大众","宝马"],[1,2,3,4,5])
d2 = mk_df(["大众","宝马"],[6,7,8,9,10])
display(d1,d2)
d1.append(d2)
# DataFrame.merge(right, how='inner', on=None, left_on=None, right_on=None, 
#                 left_index=False, right_index=False, sort=False, 
#                 suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)
# merge: 合并数据集, 通过left, right确定连接字段,默认是两个数据集相同的字段
# left 参与合并的左侧DataFrame 
# right 参与合并的右侧DataFrame 
# how 连接方式:‘inner’(默认);还有,‘outer’、‘left’、‘right’ 
# on 用于连接的列名,必须同时存在于左右两个DataFrame对象中,如果位指定,则以left和right列名的交集作为连接键 
# left_on 左侧DataFarme中用作连接键的列 
# right_on 右侧DataFarme中用作连接键的列 
# left_index 将左侧的行索引用作其连接键 
# right_index 将右侧的行索引用作其连接键 
# sort 根据连接键对合并后的数据进行排序,默认为True。有时在处理大数据集时,禁用该选项可获得更好的性能 
# suffixes 字符串值元组,用于追加到重叠列名的末尾,默认为(‘_x’,‘_y’).例如,左右两个DataFrame对象都有‘data’,则结果中就会出现‘data_x’,‘data_y’ 
# copy 设置为False,可以在某些特殊情况下避免将数据复制到结果数据结构中。默认总是赋值
d1 = DataFrame({"员工":["张三","李四","王五"],"部门":["人力资源部","市场部","销售部"]})
d2 = DataFrame({"员工":["张三","李四","王五"],"工作时间":[2,4,5]})
display(d1,d2)
pd.merge(d1,d2)
d1 = DataFrame({"员工":["张三","李四","李四"],"部门":["人力资源部","市场部","销售部"]})
d2 = DataFrame({"员工":["张三","李四","钱八"],"工作时间":[2,4,5]})
display(d1,d2)
pd.merge(d1,d2)
d1 = DataFrame({"员工":["张三","李四","黄三"],"部门":["人力资源部","市场部","销售部"],"薪水":[10000,9000,8000]})
d2 = DataFrame({"员工":["张三","李四","钱八"],"部门":["人力资源部","市场部","销售部"],"工作时间":[2,4,5]})
display(d1,d2)
d1 = DataFrame({"员工":["张三","李四","黄三"],"部门":["人力资源部","市场部","销售部"],"薪水":[10000,9000,8000]})
d2 = DataFrame({"员工":["张三","李四","钱八"],"部门":["市场部","市场部","销售部"],"工作时间":[2,4,5]})
display(d1,d2)
pd.merge(d1,d2)
#通过参数on来说明根据那列进行匹配
pd.merge(d1,d2,on = "员工")
pd.merge(d1,d2,on = "部门")
#适用于两表列表不一致但要匹配时的场景left_on左表的匹配项  right_on右表的匹配项
pd.merge(d1,d2,left_on = "员工",right_on = "员工")
#how参数表示连接方式默认inner内连接
#全外连接
pd.merge(d1,d2,left_on="员工",right_on="员工",how = "outer")
#左连接
pd.merge(d1,d2,left_on="员工",right_on="员工",how = "left")
#右连接
pd.merge(d1,d2,left_on="员工",right_on="员工",how = "right")
目录
相关文章
|
4天前
|
数据处理 Python
如何使用Python的Pandas库进行数据排序和排名
【4月更文挑战第22天】Pandas Python库提供数据排序和排名功能。使用`sort_values()`按列进行升序或降序排序,如`df.sort_values(by='A', ascending=False)`。`rank()`函数用于计算排名,如`df['A'].rank(ascending=False)`。多列操作可传入列名列表,如`df.sort_values(by=['A', 'B'], ascending=[True, False])`和分别对'A'、'B'列排名。
14 2
|
1天前
|
数据采集 数据可视化 数据挖掘
R语言与Python:比较两种数据分析工具
【4月更文挑战第25天】R语言和Python是目前最流行的两种数据分析工具。本文将对这两种工具进行比较,包括它们的历史、特点、应用场景、社区支持、学习资源、性能等方面,以帮助读者更好地了解和选择适合自己的数据分析工具。
|
3天前
|
数据挖掘 数据处理 索引
如何使用Python的Pandas库进行数据筛选和过滤?
Pandas是Python数据分析的核心库,提供DataFrame数据结构。基本步骤包括导入库、创建DataFrame及进行数据筛选。示例代码展示了如何通过布尔索引、`query()`和`loc[]`方法筛选`Age`大于19的记录。
10 0
|
3天前
|
索引 Python
如何使用Pandas进行数据合并?
Pandas提供`merge()`, `join()`, `concat()`等方法进行数据合并。基本步骤包括导入pandas库、创建或加载DataFrame,然后调用这些方法合并数据。示例中展示了如何使用`merge()`和`join()`:创建两个DataFrame `df1`和`df2`,通过`merge()`基于索引合并,以及`join()`进行外连接合并。
14 0
|
5天前
|
Python
如何使用Python的Pandas库进行数据缺失值处理?
Pandas在Python中提供多种处理缺失值的方法:1) 使用`isnull()`检查;2) `dropna()`删除含缺失值的行或列;3) `fillna()`用常数、前后值填充;4) `interpolate()`进行插值填充。根据需求选择合适的方法处理数据缺失。
39 9
|
7天前
|
索引 Python
如何使用Python的Pandas库进行数据透视表(pivot table)操作?
使用Pandas在Python中创建数据透视表的步骤包括:安装Pandas库,导入它,创建或读取数据(如DataFrame),使用`pd.pivot_table()`指定数据框、行索引、列索引和值,计算聚合函数(如平均分),并可打印或保存结果到文件。这允许对数据进行高效汇总和分析。
10 2
|
7天前
|
机器学习/深度学习 数据挖掘 计算机视觉
python数据分析工具SciPy
【4月更文挑战第15天】SciPy是Python的开源库,用于数学、科学和工程计算,基于NumPy扩展了优化、线性代数、积分、插值、特殊函数、信号处理、图像处理和常微分方程求解等功能。它包含优化、线性代数、积分、信号和图像处理等多个模块。通过SciPy,可以方便地执行各种科学计算任务。例如,计算高斯分布的PDF,需要结合NumPy使用。要安装SciPy,可以使用`pip install scipy`命令。这个库极大地丰富了Python在科学计算领域的应用。
12 1
|
8天前
|
数据可视化 数据挖掘 Python
Python中数据分析工具Matplotlib
【4月更文挑战第14天】Matplotlib是Python的数据可视化库,能生成多种图表,如折线图、柱状图等。以下是一个绘制简单折线图的代码示例: ```python import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] plt.figure() plt.plot(x, y) plt.title('简单折线图') plt.xlabel('X轴') plt.ylabel('Y轴') plt.show() ```
12 1
|
8天前
|
数据采集 SQL 数据可视化
Python数据分析工具Pandas
【4月更文挑战第14天】Pandas是Python的数据分析库,提供Series和DataFrame数据结构,用于高效处理标记数据。它支持从多种数据源加载数据,包括CSV、Excel和SQL。功能包括数据清洗(处理缺失值、异常值)、数据操作(切片、过滤、分组)、时间序列分析及与Matplotlib等库集成进行数据可视化。其高性能底层基于NumPy,适合大型数据集处理。通过加载数据、清洗、分析和可视化,Pandas简化了数据分析流程。广泛的学习资源使其成为数据分析初学者的理想选择。
15 1
|
9天前
|
数据采集 数据可视化 数据挖掘
NumPy在数据分析中的核心应用
【4月更文挑战第17天】NumPy是Python数据分析基础库,核心应用包括数据结构化、预处理、统计分析和可视化。它提供`ndarray`多维数组对象及灵活索引,用于数据存储和处理。数据预处理支持缺失值处理,统计分析涵盖描述性统计和相关性分析。虽不直接支持数据可视化,但能与Matplotlib等库集成绘制图表。掌握NumPy能提升数据分析效率,助于挖掘数据价值。