pandas 数据处理汇总(下)

简介: pandas 数据处理汇总(下)

分享

方法一:

如果现在要把A中有且B中没有的数据,也就是新增部分,加到B表中去,该如何操作呢?

其实就是A与B求差集(A-C)后,再与B求并集

d590378df6f840c2bf47eb55d0f3d59b.png

在上面的基础上进行如下操作
res = pd.merge(B,chaji, on=['学号','年龄','成绩'], how='outer')
res
输出:
        学号  年龄  成绩
      0 1 23  89
      1 2 22  90
      2 3 34  67
      3 4 33  88
      4 5 12  78
      5 6 27  98
      6 0 20  无
      7 7 28  90

方法二:A+B后,选择性看是否需要去重

直接求A与B 的并集,如果B中与A中字段数据不一致,需要按字段将数据去重,去重的时候,默认保留上一行,不保证数据准确性,最好A与B的表头一致。

dataA = {'学号':['1', '20', '3','4','5','6'],'年龄':['23','000','34','33','12','27'],'成绩':['89','90','67','88','78','98']}
B = pd.DataFrame(dataA)
dataB = {'学号':['0','1', '20', '3','4','5','7'],'年龄':['20','23','22','34','33','12','28'],'成绩':['无','89','90','67','88','78','90']}
A = pd.DataFrame(dataB)
print(A)
print(B)
输出:可以注意到B中明显有一个错误数据——学号:20  
A        学号  年龄  成绩
      0   0  20   无
      1   1  23  89
      2  20  22  90
      3   3  34  67
      4   4  33  88
      5   5  12  78
      6   7  28  90
B        学号   年龄  成绩
      0   1   23  89
      1  20  000  90
      2   3   34  67
      3   4   33  88
      4   5   12  78
      5   6   27  98
# A与B求并集
res = pd.merge(B,A, on=['学号','年龄','成绩'], how='outer')
res
输出:
      学号  年龄  成绩
      0 1 23  89
      1 20  000 90
      2 3 34  67
      3 4 33  88
      4 5 12  78
      5 6 27  98
      6 0 20  无
      7 20  22  90
      8 7 28  90
#去重,如果数据重复,自动保存上边那条,不保证结果准确性
res1 = res.drop_duplicates(['学号'])
res1
输出:
        学号  年龄  成绩
      0 1 23  89
      1 20  000 90
      2 3 34  67
      3 4 33  88
      4 5 12  78
      5 6 27  98
      6 0 20  无
      8 7 28  90


去除重复行

#原始数据
dataA = {'学号':['0','1','0','1','0','1'],'年龄':['20','23','20','23','20','24'],'成绩':['89','90','89','90','89','96']}
df = pd.DataFrame(dataA)
输出:
        学号  年龄  成绩
      0 0 20  89
      1 1 23  90
      2 0 20  89
      3 1 23  90
      4 0 20  89
      5 1 24  96


  1. 删除所有重复行
    注意:必须每一列数据都一样才会删除
---删除所有重复行---
df_res = df.drop_duplicates()
输出:
        学号  年龄  成绩
      0  0  20  89
      1  1  23  90
      5  1  24  96


  1. 删除指定列重复的数据
    最后只保留学号去重后,最上边的数据,学号为“1”,年龄为“24”的数据也被删除
---删除“学号”列重复的数据---
res = df.drop_duplicates(['学号'])
res
输出:
      学号  年龄  成绩
      0 0 20  89
      1 1 23  90


  1. 保留最后出现的值,使用关键字keep=‘last’
    保留了学号为“1”,年龄为“24”那行
    也可以按照多列去重
---去重后,保留最后一次出现的数据---
res = df.drop_duplicates(['学号'], keep='last')
res
输出:
      学号  年龄  成绩
      4 0 20  89
      5 1 24  96
#按照多列去重
res = df.drop_duplicates(['学号', '年龄'], keep='last')
res
输出:
        学号  年龄  成绩
      3 1 23  90
      4 0 20  89
      5 1 24  96


透视


数据透视表是Excel的另一个神器,本质上是一系列的表格重组整合的过程。这里用的案例来自知乎,Excel数据透视表有什么用途:(https://www.zhihu.com/question/22484899/answer/39933218 )


问题:需要汇总各个区域,每个月的销售额与成本总计,并同时算出利润

26a8a8439d8542e3ae179e92143b8b2d.png

通过Excel的数据透视表的操作最终实现了下面这样的效果:

80def93bdf3847b9b8ea417d6304476f.png

python实现:对于这样的分组的任务,首先想到的就是pandas的groupby,代码写起来也简单,思路就是把刚才Excel的点鼠标的操作反映到代码命令上:

df = pd.read_excel('test.xlsx', sheet_name='销售统计表')
df['订购月份'] = df['订购日期'].apply(lambda x:x.month)
df2 = df.groupby(['订购月份', '所属区域'])[['销售额', '成本']].agg('sum')
df2['利润'] = df2['销售额'] - df2['成本']
df2
Out[]: 
                 销售额         成本        利润
订购月份 所属区域                                
1    南京    134313.61   94967.84  39345.77
     常熟    177531.47  163220.07  14311.40
     无锡    316418.09  231822.28  84595.81
     昆山    159183.35  145403.32  13780.03
     苏州    287253.99  238812.03  48441.96
2    南京    187129.13  138530.42  48598.71
     常熟    154442.74  126834.37  27608.37
     无锡    464012.20  376134.98  87877.22
     昆山    102324.46   86244.52  16079.94
     苏州    105940.34   91419.54  14520.80
             ...        ...       ...
11   南京    286329.88  221687.11  64642.77
     常熟   2118503.54 1840868.53 277635.01
     无锡    633915.41  536866.77  97048.64
     昆山    351023.24  342420.18   8603.06
     苏州   1269351.39 1144809.83 124541.56
12   南京    894522.06  808959.32  85562.74
     常熟    324454.49  262918.81  61535.68
     无锡   1040127.19  856816.72 183310.48
     昆山   1096212.75  951652.87 144559.87
     苏州    347939.30  302154.25  45785.05
[60 rows x 3 columns]


也可以使用pandas里的pivot_table函数来实现:

df3 = pd.pivot_table(df, values=['销售额', '成本'], index=['订购月份', '所属区域'] , aggfunc='sum')
df3['利润'] = df3['销售额'] - df3['成本']
df3 


pandas的pivot_table的参数index/ columns/ values和Excel里的参数是对应上的(当然,我这话说了等于没说,数据透视表里不就是行/列/值吗还能有啥。)

groupby的功能很全面,内置了很多aggregate函数,能够满足大部分的基本需求,如果你需要一些其他的函数,可以搭配使用apply和lambda。


格式调整


修改列宽

  1. 只修改Jupyter notebook显示,可以使用Style功能,对导出表无影响
### Test data
df.style.set_properties(subset=['Name'], **{'width': '200px'})
#输出结果如下:

b67b045eaa424dd587c0ed3b61198b90.png

  1. 修改导出表列宽
    python修改导出excel列宽


合并单元格

df.merge_cells(‘A1:F1’)

e51513df8ea142209db15c54d7b08b6d.png


绘图


因为Excel画出来的图能够交互,能够在图上进行一些简单操作,所以这里用的python的可视化库是plotly,开始之前,首先加载plotly包。

import plotly.offline as off
import plotly.graph_objs as go
off.init_notebook_mode()


柱状图

excel画的:

ac6eb52b1f55401faac37e3c33e55ad6.png

e81ccd27fb1c43579d6e4a257fd6be5f.png

df = pd.read_excel("plot.xlsx", sheet_name='高等教育入学率')
trace1 = go.Bar(
        x=df['国家'],
        y=df[1995],
        name='1995',
        opacity=0.6,
        marker=dict(
                color='powderblue'
                )
        )
trace2 = go.Bar(
        x=df['国家'],
        y=df[2005],
        name='2005',
        opacity=0.6,
        marker=dict(
                color='aliceblue',
                )
        )
trace3 = go.Bar(
        x=df['国家'],
        y=df[2014],
        name='2014',
        opacity=0.6,
        marker=dict(
                color='royalblue'
                )
        )
layout = go.Layout(barmode='group')
data = [trace1, trace2, trace3]
fig = go.Figure(data, layout)
off.plot(fig)

雷达图

用Excel画的:

8323b4d9c07549938c97fb45a026b1fe.png

7fb59e30c15e426892a63052b3e3b235.png

df = pd.read_excel('plot.xlsx', sheet_name='政治治理')
theta = df.columns.tolist()
theta.append(theta[0])
names = df.index
df[''] = df.iloc[:,0]
df = np.array(df)
trace1 = go.Scatterpolar(
        r=df[0],
        theta=theta,
        name=names[0]
        )
trace2 = go.Scatterpolar(
        r=df[1],
        theta=theta,
        name=names[1]
        )
trace3 = go.Scatterpolar(
        r=df[2],
        theta=theta,
        name=names[2]
        )
trace4 = go.Scatterpolar(
        r=df[3],
        theta=theta,
        name=names[3]
        )
data = [trace1, trace2, trace3, trace4]
layout = go.Layout(
        polar=dict(
                radialaxis=dict(
                        visible=True,
                        range=[0,1]
                        )
                ),
        showlegend=True
        )
fig = go.Figure(data, layout)
off.plot(fig)

画起来比Excel要麻烦得多。

总体而言,如果画简单基本的图形,用Excel是最方便的,如果要画高级一些的或者是需要更多定制化的图形,使用python更合适。

相关文章
|
22天前
|
并行计算 数据处理 API
再见 Pandas,又一数据处理神器!
再见 Pandas,又一数据处理神器!
|
17天前
|
数据可视化 数据挖掘 数据处理
进阶 pandas DataFrame:挖掘高级数据处理技巧
【5月更文挑战第19天】本文介绍了Pandas DataFrame的高级使用技巧,包括数据重塑(如`pivot`和`melt`)、字符串处理(如提取和替换)、日期时间处理(如解析和时间序列操作)、合并与连接(如`merge`和`concat`),以及使用`apply()`应用自定义函数。这些技巧能提升数据处理效率,适用于复杂数据分析任务。推荐进一步学习和探索Pandas的高级功能。
|
22天前
|
数据处理 索引 Python
使用pandas的merge()和join()函数进行数据处理
使用pandas的merge()和join()函数进行数据处理
38 2
|
22天前
|
数据采集 数据挖掘 大数据
数据处理利器:使用Pandas进行数据清洗与转换
【4月更文挑战第12天】在大数据时代,Pandas是Python数据分析的关键工具,提供高效的数据清洗和转换功能。本文介绍了如何使用Pandas处理缺失值(删除或填充)、异常值(Z-Score法和IQR法)以及重复值(检测和删除)。此外,还涵盖了数据转换,包括数据类型转换、数据标准化(Min-Max和Z-Score)以及类别数据的one-hot编码。通过学习这些方法,可以为数据分析和挖掘奠定坚实基础。
|
1天前
|
数据采集 安全 数据处理
Python采集数据处理:利用Pandas进行组排序和筛选
使用Python的Pandas库,结合亿牛云代理和多线程技术,提升网络爬虫数据处理效率。通过代理IP避免封锁,多线程并发采集,示例代码展示数据分组、排序、筛选及代理IP配置和线程管理。
Python采集数据处理:利用Pandas进行组排序和筛选
|
7天前
|
数据采集 SQL 数据处理
Python中的Pandas库:数据处理与分析的利器
Python中的Pandas库:数据处理与分析的利器
21 0
|
8天前
|
数据采集 数据可视化 数据处理
Python中的高效数据处理:Pandas库详解
Python中的高效数据处理:Pandas库详解
31 2
|
16天前
|
数据采集 数据可视化 数据处理
利用Python和Pandas库实现高效的数据处理与分析
在大数据和人工智能时代,数据处理与分析已成为不可或缺的一环。Python作为一门强大的编程语言,结合Pandas库,为数据科学家和开发者提供了高效、灵活的数据处理工具。本文将介绍Pandas库的基本功能、优势,并通过实际案例展示如何使用Pandas进行数据清洗、转换、聚合等操作,以及如何利用Pandas进行数据可视化,旨在帮助读者深入理解并掌握Pandas在数据处理与分析中的应用。
|
17天前
|
数据挖掘 数据处理 Python
【Python DataFrame 专栏】深入探索 pandas DataFrame:高级数据处理技巧
【5月更文挑战第19天】在 Python 数据分析中,pandas DataFrame 是核心工具。本文介绍了几个高级技巧:1) 横向合并 DataFrame;2) 数据分组与聚合;3) 处理缺失值;4) 数据重塑;5) 条件筛选;6) 使用函数处理数据。掌握这些技巧能提升数据处理效率和分析深度,助你更好地发掘数据价值。
【Python DataFrame 专栏】深入探索 pandas DataFrame:高级数据处理技巧
|
22天前
|
SQL 数据采集 数据挖掘
构建高效的Python数据处理流水线:使用Pandas和NumPy优化数据分析任务
在数据科学和分析领域,Python一直是最受欢迎的编程语言之一。本文将介绍如何通过使用Pandas和NumPy库构建高效的数据处理流水线,从而加速数据分析任务的执行。我们将讨论如何优化数据加载、清洗、转换和分析的过程,以及如何利用这些库中的强大功能来提高代码的性能和可维护性。