Pandas-DataFrame常用基础知识点总结

news2024/11/23 10:49:25

注:以下知识点总结是将数据转为DataFrame格式数据的基础之上进行操作的

(首先需要做的是将数据转为DataFrame格式)

DataFrame格式示例:

import pandas as pd
data = {
    "code": ['000008', '000009', '000021', '000027', '000034', '000058', '000062', '000063', '000063', '000063', '000063'],
    "name": ['神州科技', '中国宝安', '深科技', '深圳能源', '神州数码', '深赛格', '深圳华强', '中兴通讯', '中兴通讯', '中兴通讯', '中兴通讯'],
    "concept": ['5G', '创投', '芯片概念', '创投', '网络安全', '创投', '创投', '芯片概念', '边缘计算', '网络安全', '5G'],
        }
stock_df = pd.DataFrame(data=data)
print(stock_df)

1、对某列字符替换

比如:将编码‘ys4ng35toofdviy9ce0pn1uxw2x7trjb’替换为 ‘娱乐’(较多替换建议使用该方法)

dicts = {'ys4ng35toofdviy9ce0pn1uxw2x7trjb':'娱乐',
        'vekgqjtw3ax20udsniycjv1hdsa7t4oz':'经济',
        'vjzy0fobzgxkcnlbrsduhp47f8pxcoaj':'军事',
        'uamwbfqlxo7bu0warx6vkhefigkhtoz3':'政治',
        'lyr1hbrnmg9qzvwuzlk5fas7v628jiqx':'文化',
        }
res['name'] = res['name'].map(lambda x:dicts[x] if x in dicts else x)
print(res)

或者:

比如:将5G 替换为 6G,创投 替换为 创业投资(个别需要替换建议此方法)

stock_df['concept'] = stock_df['concept'].str.replace('5G', '6G').str.replace('创投', '创业投资')
print(stock_df)  

2、分组统计

  name  value
0   娱乐      8
1   经济      5
2   军事      3
3   政治      3
4   娱乐      2
5   文化      1
6   政治      1
7   经济      1
8   军事      1
9   文化      1
#分组统计  一列分类统计求和用sum
result = res.groupby(['name']).sum().reset_index()
print(result)


运行结果:
 name  value
0   军事      4
1   娱乐     10
2   政治      4
3   文化      2
4   经济      6

3、聚合统计(按多个列多层分组)

# 聚合统计  多列分类聚合求和用size()
data = result.groupby(['name', 'type']).size().reset_index(name='value')

4、根据某列进行排序

#排序
result = result.sort_values(['value'], ascending=False)

 5、dataframe格式转字典

# 输出为list,前端需要的数据格式
    data_dict = result.to_dict(orient='records')
print(data_dict)
# 指定某两列转字典
res_df = res_df[['zhongzhi_date', 'cumsum']].to_dict(orient='records')


# 结果
[{'name': '娱乐', 'value': 10}, {'name': '经济', 'value': 6}, 
{'name': '军事', 'value': 4}, {'name': '政治', 'value': 4},
{'name': '文化', 'value': 2}]

6、datafrane 多行合并为一行

def ab(df):
    return','.join(df.values)
    
df = df.groupby(['code','name'])['concept'].apply(ab)
df = df.reset_index()
print(df)

7、新增一列与删除一列

# 新增一列
stock_df['new_column'] = '股票'
print(stock_df)
# 删除一列法一
stock_df.pop('new_column')
print(stock_df)
# 删除一列法二
stock_df = stock_df.drop('new_column', axis=1)
print(stock_df)

8、删除某列字符大于8的行

# 删除字符大于8的行
text_data = text_data.drop(text_data[text_data['name'].str.len() > 8].index) 

9、dataframe某列转字符串、整型

# 将code列转字符串
stock_df['code'] = stock_df['code'].astype(str)
# 将code列转整型
stock_df['code'] = stock_df['code'].astype(int)

10、删除包含某特殊字符的行

# 去掉包含'null'的行
result = result[~ result['name'].str.contains('null')] 
# 去掉包含'0'的行
result = result[~ result['name'].str.contains('0')]  

11、对某列文本中包含的字符进行替换删除

text_data['name'] = text_data['name'].map(lambda x: x.replace('罪', ''))

 12、dataframe截取某列字符

例如:casenumber列格式: ***刑通[3099]第666号

result['category'] = result['casenumber'].map(lambda x:str(x)[3:5])
result['category'] = result['category'].replace('刑通', '刑事案件').replace('民申', '民事案件').replace('刑申', '刑事案件').replace('行申', '行政案件').replace('刑认', '刑事案件')
print(result)

13、指定时间格式

result['noticetime'] = result['noticetime'].dt.strftime('%Y%m%d')

14、两个dataframe格式合并,并对空值/缺失值进行填充

可以根据一个或多个键将不同的DataFrame中的行连接起来,并将空值填充为‘不详’

1、根据单个或多个键将不同的DataFrame的行连接起来

2、类比sql join操作

3、默认将重叠列的列名作为“外键”进行连接

        on 显式的指定 “外键”result = pd.merge(res2, res, how='outer').fillna('不详')

        left_on 左侧数据的外键

        right_on 右侧数据的外键

4、默认是 “内连接”(inner),即结果中的键是交集

result = pd.merge(res2, res, how='outer').fillna('不详')  
  • concat:可以沿一条轴将多个对象连接到一起
  • merge:可以根据一个或多个键将不同的DataFrame中的行连接起来。
  • join:inner是交集,outer是并集。

15、 在某列数据末尾添加特殊字符

stock_df['new_column'] = stock_df['new_column'].map(lambda x: str(x) + '年')

16、dropna 丢弃缺失数据(处理缺失数据)

# 删除
stock_df.dropna() 
# 填充
stock_df.fillna('null')

17、获取索引和数据 预览数据,默认打印前五个

#获取索引
print(stock_df.index)
# 获取数据
print(stock_df.values)
# 预览数据,默认是前5个
print(stock_df.head(3))
# 预览数据,默认是后5个
print(stock_df.tail(3))

18、删除重复数据

#重复数据
df_obj.duplicated()
#删除重复数据
df_obj.drop_duplicates()
#删除指定列重复数据
df_obj.drop_duplicates('data2')

19、常用的统计计算:sum、mean、max、min

axis=0 按列统计,axis=1 按行统计(axis=0时,表示最后的数据是一行,所以需要按列统计,axis=1时,表示最后的数据是一列,所以需要按行统计)

stock_df.sum()
stock_df.max()
stock_df.min(axis=1)
# 统计描述
print(stock_df.describe())

20、聚合aggregation

dict_obj = {'key1' : ['a', 'b', 'a', 'b',
                      'a', 'b', 'a', 'a'],
            'key2' : ['one', 'one', 'two', 'three',
                      'two', 'two', 'one', 'three'],
            'data1': np.random.randint(1,10, 8),
            'data2': np.random.randint(1,10, 8)}
df_obj5 = pd.DataFrame(dict_obj)
print(df_obj5)

# 内置的聚合函数
print(df_obj5.groupby('key1').sum())
print(df_obj5.groupby('key1').max())
print(df_obj5.groupby('key1').min())
print(df_obj5.groupby('key1').mean())
print(df_obj5.groupby('key1').size())
print(df_obj5.groupby('key1').count())
print(df_obj5.groupby('key1').describe())

# 自定义聚合函数,传入agg方法中
def peak_range(df):
    """
        返回数值范围
    """
    #print type(df) #参数为索引所对应的记录
    return df.max() - df.min()

print(df_obj5.groupby('key1').agg(peak_range))
print(df_obj5.groupby('key1').agg(lambda df : df.max() - df.min()))

21、使用countains可以用来正则匹配筛选

#使用countains可以用来正则匹配筛选 (将 合计 列中包含change值的行 数量列 值改为C)
df.loc[df['合计'].str.contains('change'), '数量'] = 'C'
# print(df)
#某些列满足特定条件,然后改变另外的某些列的值(先定位到 数量 列中为A的行,再将对应该行以及对应 合计 列中的值改为changed )
df.loc[df['数量'] == 'A', '合计'] = 'changed'  # 关键句,直接改变df的值

22、某列累计求和 cumsum函数

res_df['cumsum'] = res_df['data_num'].cumsum()
print(res_df)

 23、某列整体计算 (整体加上一个数)

res_total[0] = 7131
res_df['cumsum'] = res_df['cumsum'] + res_total[0]
print(res_df)

24、 根据某一列值得范围,对另一列进行赋值

 25、根据某几列值的范围,对另一列进行赋值

26、 比较Pandas中的当前行和上一行

      Open     High      Low    Close  Volume Position
0  1.20821  1.20821  1.20793  1.20794  138.96        -
1  1.20794  1.20795  1.20787  1.20788  119.61     DOWN
2  1.20788  1.20793  1.20770  1.20779  210.42     DOWN
3  1.20779  1.20791  1.20779  1.20789   77.51     DOWN
4  1.20789  1.20795  1.20789  1.20792   56.97     DOWN
df['Position'] = np.where((df['Volume'] > df['Volume'].shift(-1)) & 
    ((df['Close'] >= df['Close'].shift(-1)) & (df['Open'] <= df['Open'])),
    "UP","DOWN")

27、对某一列进行处理(对某列的时间格式进行处理)

concat_df['changed_on'] = concat_df['changed_on'].apply(lambda x: str(x)[:19])

28、多列合并为一列

res_df['huji_address'] = res_df['huji_name']+res_df['hujisuozaidi']

29、根据某列中的记录,删除重复项

res_df = res_df.drop_duplicates(['p_name'], keep='last').reindex()

30、某两列时间相减

df_data['new_time'] = pd.DataFrame(pd.to_datetime(
df_data['target_time']) - pd.to_datetime(df_data['start_time']))

31、pandas dataframe 删除去掉默认索引 、取消索引、重置索引

删除默认索引(给其设置新的索引,则默认索引就去除了):

res_df.set_index(['report_time'], inplace=True)

取消索引(取消所有索引,恢复到默认索引):

res_df = res_df.reset_index()

重置索引:

res_df = res_df.reset_index(drop=True)

32、pandas 统计某一列中各个值的出现次数

#可以通过df.colname 来指定某个列,value_counts()在这里进行计数,其中city为某一列的字段名
df2 = df1.city.value_counts()  
print(df2)

pandas官方文档:Pandas: 强大的 Python 数据分析支持库 | Pandas

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/667663.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录二刷 day28 | 回溯 之 93.复原IP地址 78.子集 90.子集II

day28 93.复原IP地址判断子串是否合法 78.子集回溯三部曲 90.子集II 93.复原IP地址 题目链接 解题思路&#xff1a; 切割问题就可以使用回溯搜索法把所有可能性搜出来 回溯三部曲 递归参数 startIndex一定是需要的&#xff0c;因为不能重复分割&#xff0c;记录下一层递归分…

一种数据源切换的实践方案

随着业务的不断深入&#xff0c;我们会碰见很多关于数据源切换的业务场景&#xff0c;数据源切换也是当前最常用的分库后的分流策略方式之一&#xff0c;对于读写职责分离的数据库集群而言&#xff0c;我们在服务层面制定相应的接口与数据库交互的定制化开发&#xff0c;也就是…

云 cloud 高可用系统--在RDS上实现,从原理上不可能保证你100%不丢数据

我写这篇文字&#xff0c;实属无奈&#xff0c;在目前很多企业都依赖云的情况下&#xff0c;数据库的很多事情都是身不由己&#xff0c;发生问题&#xff0c;你查看日志&#xff0c;分析日志可能你连日志都不是全部的&#xff0c;并且想通过程序来过滤这个日志很多情况下都有限…

数据库系统概述——第六章 关系数据理论(知识点复习+练习题)

&#x1f31f;博主&#xff1a;命运之光 &#x1f984;专栏&#xff1a;离散数学考前复习&#xff08;知识点题&#xff09; &#x1f353;专栏&#xff1a;概率论期末速成&#xff08;一套卷&#xff09; &#x1f433;专栏&#xff1a;数字电路考前复习 &#x1f99a;专栏&am…

CMU 15-445 Project #2 - B+Tree(CHECKPOINT #1)

CHECKPOINT #1 一、题目链接二、准备工作三、部分实现1.查找操作2.插入操作3.删除操作 四、评测结果 一、题目链接 二、准备工作 见 CMU 15-445 Project #0 - C Primer 中的准备工作。 三、部分实现 对于B树的节点定义&#xff0c;通过节点类的命名 b_plus_tree_page 不难发现…

linux-centos7操作系统查看系统未挂载的磁盘,挂载磁盘

linux-centos7操作系统查看系统未挂载的磁盘,挂载磁盘 查看当前磁盘空间 根目录 / 下也只有44G,其他目录只有10几G,正式环境肯定不够用 df -h查看硬盘数量和分区情况 fdisk -l查看到/dev/vdb 有500多G了 将/dev/vdb在分出一个区使用 第一步:编辑分区。执行命令fdisk …

pr视频叠加,即原视频右上角添加另外一个视频方法,以及pr导出视频步骤

一、pr视频叠加&#xff0c;即原视频右上角添加另外一个视频方法 在使用pr制作视频时&#xff0c;我们希望在原视频的左上角或右上角同步播放另外一个视频&#xff0c;如下图所示&#xff1a; 具体方法为&#xff1a; 1、导入原视频&#xff0c;第一个放在v1位置&#xff0c;第…

Selenium编写自动化用例的8种技巧

在开始自动化时&#xff0c;您可能会遇到各种可能包含在自动化代码中的方法&#xff0c;技术&#xff0c;框架和工具。有时&#xff0c;与提供更好的灵活性或解决问题的更好方法相比&#xff0c;这种多功能性导致代码更加复杂。在编写自动化代码时&#xff0c;重要的是我们能够…

【序列dp】最长上升子序列(一)

文章目录 最长上升子序列-序列dp概览895 最长上升子序列-O(n^2)1017 怪盗基德的滑翔翼1014 登山482 合唱队形1012 友好城市 最长上升子序列-序列dp 什么是序列相关的 DP &#xff1f;序列相关 DP&#xff0c;顾名思义&#xff0c;就是将动态规划算法用于数组或者字符串上&…

textgen教程(持续更新ing...)

诸神缄默不语-个人CSDN博文目录 官方GitHub项目&#xff1a;shibing624/textgen: TextGen: Implementation of Text Generation models, include LLaMA, BLOOM, GPT2, BART, T5, SongNet and so on. 文本生成模型&#xff0c;实现了包括LLaMA&#xff0c;ChatGLM&#xff0c;B…

C++课程学习记录

目录 1. 前置说明2. 二叉树的模拟2.1 参考资料2.2 二叉树的构建2.2.1 递归构建2.2.2 迭代构建 2.3 二叉树的遍历2.4 二叉树的应用 3. 继承与派生3.1 最简单的生死3.2 动态申请空间的生死3.3 继承中的protectd权限3.4 三种继承方式3.5 修改某些继承成员的继承类型3.6 多级派生3.…

C++57个入门知识点_番外1_C++指针偏移在类中的应用及指针偏移原理

这是对C指针偏移介绍比较好的博文&#xff0c;但是比较分散&#xff0c;我把其进行了整理&#xff0c;原博文地址请见最后&#xff0c;讲的很详细。 C57个入门知识点_番外1_C指针偏移在类中的应用及指针偏移原理 1. C指针偏移原理2. C显示十进制内存地址&#xff08;不用理解&…

AQS原理

目录 一、原理概述二、AQS 对资源的共享方式三、AQS底层使用了模板方法模式四、使用demo&#xff0c;使用AQS实现不可重入锁五、AQS使用到的几个框架 一、原理概述 AQS全称是 AbstractQueuedSynchronizer&#xff0c;是阻塞式锁和相关的同步器工具的框架 AQS核心思想是&#…

Appian低代码平台

国外老牌低代码开发平台Appian Appian在国内用的比较少&#xff0c;资料也很匮乏。需要自己主动去官网寻找。 Appian 学习平台 进入Appian Community可以选择学习路径&#xff0c;可以选择适合自己的学习路径&#xff1b;我选择的是Builder路径&#xff0c; 看了足足80个小…

opencv检测二维码和条形码

文章目录 1 excel制作简单二维码2 识别二维码和条形码2.1 相关库2.2 decode解码2.3 圈出二维码的位置2.4 判断二维码是否授权 3 完整代码3.1 使用图片进行识别3.2 使用摄像头实时识别 4 总结 1 excel制作简单二维码 使用excel可以实现制作二维码&#xff0c;但只能实现做英文和…

基于51单片机的简易电子琴设计

目录 摘 要 基于51单片机的简易电子琴设计 一、系统设计 1、项目概要 2.设计任务和基本要求 二、硬件设计 1、硬件设计概要 2、时钟振荡电路模块 3.复位电路模块 5.数码管电路模块 6.蜂鸣器模块 7、乐曲切换电路模块 三、软件原理 四、软件流程图 五、代码实现 …

解析Transformer基本结构与实现

1.基本结构 ​ Transformer总体架构可分为4个部分&#xff1a; 输入部分-输出部分-编码器部分-解码器部分 输入部分包含&#xff1a; 原文本嵌入层&#xff08;Input embedding&#xff09;及其位置编码(position encoding)目标文本嵌入层及其位置编码器 文本嵌入层的作…

TCP/UDP协议重温三次握手四次挥手 简单笔记

术语储备&#xff1a; SYN&#xff1a;同步位 &#xff1b;SYN1,表示进行一个连接请求 ACK&#xff1a;确认位 &#xff1b;ACK1,确认有效 ACK0&#xff0c;确认无效 ack : 确认号 &#xff1b;对方发送序号1 seq &#xff1a; 序号 ; 标识从TCP发端向TCP收端发送的数据字节流 …

基于JPA的Repository使用详解

Spring Data JPA Spring Data是Spring提供的操作数据的框架&#xff0c;Spring Data JPA是Spring Data的一个模块&#xff0c;通过Spring data 基于jpa标准操作数据的模块。 Spring Data的核心能力&#xff0c;就是基于JPA操作数据&#xff0c;并且可以简化操作持久层的代码。…

BLOND:ISH VoxEdit 创作大赛来啦!

准备好随着 BLOND:ISH 的节拍释放你们的创造力和节奏&#xff0c;因为我们将举办一场与众不同的刺激比赛。你们可以在 BLOND:ISH VoxEdit 大赛中展示你们的才华并赢得 SAND 奖励&#xff01; &#x1f3dd;️ 比赛主题&#xff1a;ABRA 夏日派对 &#x1f3dd;️ 释放你们的想象…