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更合适。

相关文章
|
7月前
|
监控 物联网 数据处理
Pandas高级数据处理:数据流式计算
本文介绍了如何使用 Pandas 进行流式数据处理。流式计算能够实时处理不断流入的数据,适用于金融交易、物联网监控等场景。Pandas 虽然主要用于批处理,但通过分块读取文件、增量更新 DataFrame 和使用生成器等方式,也能实现简单的流式计算。文章还详细讨论了内存溢出、数据类型不一致、数据丢失或重复及性能瓶颈等常见问题的解决方案,并建议在处理大规模数据时使用专门的流式计算框架。
449 100
Pandas高级数据处理:数据流式计算
|
7月前
|
数据可视化 数据挖掘 数据处理
Pandas高级数据处理:交互式数据探索
Pandas 是数据分析中常用的数据处理库,提供了强大的数据结构和操作功能。本文从基础到高级,逐步介绍 Pandas 中交互式数据探索的常见问题及解决方案,涵盖数据读取、检查、清洗、预处理、聚合分组和可视化等内容。通过实例代码,帮助用户解决文件路径错误、编码问题、数据类型不一致、缺失值处理等挑战,提升数据分析效率。
163 32
|
7月前
|
数据采集 数据可视化 数据处理
Pandas高级数据处理:数据仪表板制作
《Pandas高级数据处理:数据仪表板制作》涵盖数据清洗、聚合、时间序列处理等技巧,解决常见错误如KeyError和内存溢出。通过多源数据整合、动态数据透视及可视化准备,结合性能优化与最佳实践,助你构建响应快速、数据精准的商业级数据仪表板。适合希望提升数据分析能力的开发者。
160 31
|
7月前
|
存储 安全 数据处理
Pandas高级数据处理:数据安全与隐私保护
在数据驱动的时代,数据安全和隐私保护至关重要。本文探讨了使用Pandas进行数据分析时如何确保数据的安全性和隐私性,涵盖法律法规要求、用户信任和商业价值等方面。通过加密、脱敏、访问控制和日志审计等技术手段,结合常见问题及解决方案,帮助读者在实际项目中有效保护数据。
140 29
|
7月前
|
缓存 数据可视化 BI
Pandas高级数据处理:数据仪表板制作
在数据分析中,面对庞大、多维度的数据集(如销售记录、用户行为日志),直接查看原始数据难以快速抓住重点。传统展示方式(如Excel表格)缺乏交互性和动态性,影响决策效率。为此,我们利用Python的Pandas库构建数据仪表板,具备数据聚合筛选、可视化图表生成和性能优化功能,帮助业务人员直观分析不同品类商品销量分布、省份销售额排名及日均订单量变化趋势,提升数据洞察力与决策效率。
118 12
|
7月前
|
消息中间件 数据挖掘 数据处理
Pandas高级数据处理:数据流式计算
在大数据时代,Pandas作为Python强大的数据分析库,在处理结构化数据方面表现出色。然而,面对海量数据时,如何实现高效的流式计算成为关键。本文探讨了Pandas在流式计算中的常见问题与挑战,如内存限制、性能瓶颈和数据一致性,并提供了详细的解决方案,包括使用`chunksize`分批读取、向量化操作及`dask`库等方法,帮助读者更好地应对大规模数据处理需求。
151 17
|
7月前
|
数据可视化 数据挖掘 数据处理
Pandas高级数据处理:数据可视化进阶
Pandas是数据分析的强大工具,能高效处理数据并与Matplotlib、Seaborn等库集成,实现数据可视化。本文介绍Pandas在绘制基础图表(如折线图)和进阶图表(如分组柱状图、热力图)时的常见问题及解决方案,涵盖数据准备、报错处理、图表优化等内容,并通过代码案例详细解释,帮助读者掌握数据可视化的技巧。
146 13
|
7月前
|
存储 安全 数据处理
Pandas高级数据处理:数据加密与解密
本文介绍如何使用Pandas结合加密库(如`cryptography`)实现数据加密与解密,确保敏感信息的安全。涵盖对称和非对称加密算法、常见问题及解决方案,包括密钥管理、性能优化、字符编码和数据完整性验证。通过示例代码展示具体操作,并提供常见报错的解决方法。
128 24
|
7月前
|
数据采集 SQL 数据可视化
Pandas高级数据处理:交互式数据探索
Pandas是Python中流行的数据分析库,提供丰富的数据结构和函数,简化数据操作。本文从基础到高级介绍Pandas的使用,涵盖安装、读取CSV/Excel文件、数据查看与清洗、类型转换、条件筛选、分组聚合及可视化等内容。掌握这些技能,能高效进行交互式数据探索和预处理。
81 6
|
7月前
|
存储 数据采集 数据挖掘
Pandas高级数据处理:数据流处理
Pandas是Python中高效处理数据分析的流行库。随着数据量增长,传统的批量处理方式难以满足实时性需求,掌握Pandas的数据流处理技术尤为重要。常见问题包括文件格式不兼容、内存不足、缺失值和重复数据等。针对这些问题,可以通过指定参数读取文件、分块读取、填充或删除缺失值、去除重复数据、转换数据类型等方法解决。此外,还需注意KeyError、ValueError和MemoryError等常见报错,并采取相应措施。掌握这些技巧可提高数据处理效率和准确性。
174 26