学习 使用pandas库 DataFrame 使用

news2024/11/18 5:42:32

1 、 数据排序  sort_values()函数

     by:要排序的名称或名称列表, 

     sorted_df = df.sort_values(by='Age',ascending=False)  由大到小排序;

     sorted_df = df.sort_values(by='Age')  由小到大排序;

# 创建一个示例数据帧
data = {'Name': ['Tom', 'Nick', 'John', 'Amy'],
        'Age': [25, 29, 35, 21],
        'City': ['New York', 'Paris', 'London', 'Berlin']}
df = pd.DataFrame(data)

# 按照Age列进行排序
sorted_df = df.sort_values(by='Age')
sorted_df.to_csv('test1.csv')
print(sorted_df)

2 把字典,列表,迭代器 数据写入csv文件,to_csv() 函数

   方式1:

        lis_offer, lis_revenue = self.get_offer_revenue()
        data = {'offerid': lis_offer,
                'revenue': lis_revenue
                }
        result = pd.DataFrame(data)
        result.to_csv(data_path + start_time + "offer_revenue.csv")

  方式2:

        lis_offer, lis_revenue = self.get_offer_revenue()

        x_offer = np.array(lis_offer).reshape(-1, 1)
        x_revenue = np.array(lis_revenue).reshape(-1, 1)
        result = np.concatenate((x_offer, x_revenue), axis=1)
        result = pd.DataFrame(result, columns=['offerid', 'revenue'])
        result.to_csv(data_path + start_time + "offer_revenue.csv")
    def read4(self):
        active_score_lit = []
        li = ['90-100.tsv']
        for i in li:
            with open(i, mode='r+', encoding='utf-8') as file:
                for i in file.readlines():
                    aa = json.loads(i)
                    active_score_lit.append(aa)
        data = pd.DataFrame(active_score_lit)

                                             access_cat  ... conv_score
0      {"IAB9-5":7.32514399521715,"IAB9-30":7.3255896...  ...        NaN
1      {"IAB9-30":1.2948738821508443,"IAB1":1.2948738...  ...        NaN
2      {"IAB9-5":6.751567110240471,"IAB9-30":7.859169...  ...        NaN
3                                                    NaN  ...  2013.6735
4      {"IAB1":17.93415291298408,"IAB5":3.91909391671...  ...        NaN

方式3:

    

class GetOfferid():

    def get_numpage(self):
        '''
          通过请求 task任务接口 num:
        :return:
          输出  迭代器:
          offerid, strategy, country, sendSuccessCount, deviceCount
        '''

        for page in range(1, 15+1):
            url1 = host + "api/admin/v3/task/page?pageNum="+str(page)+"&pageSize=10"
            res = (requests.get(url=url1, headers=header, verify=False).json())['result']['records']
            time.sleep(1)
            for result in res:
                yield result['offerId'],result['strategy'],result['country'],result['sendSuccessCount'],result['deviceCount']

    def write_csv(self):
   
        lis_deviceCount = self.get_numpage()
        #  迭代器    generator     for i in lis_deviceCount:    遍历结果: ('9702', 'vba', 'IN', 155917, 48412574)
        result = pd.DataFrame(lis_deviceCount, columns=['offerid', 'strategy', 'country', 'sendSuccessCount', 'deviceCount'])
        result.to_csv(filename)

方式3:  已存在表格中写入一列数据:

  

        df = pd.read_csv(filename)
        df['expect_cvr'] = self.get_expect_cvr()
        df.to_csv(filename, index=False, encoding="utf_8_sig")

方式4:  已存在表格中写入几行数据:

               原数据:

              

               追加写入   result.to_csv(filename, mode='a'),      加上mode='a',便可以追加写入数据;

              

              追加写入  header=False,  不写出列名;

               result.to_csv(filename, mode='a', header=False)

3  查询 内容

   3-0 查询单行数据【索引】,遍历所有行的数据

     

# 创建一个示例数据帧
data = {'Name': ['Tom', 'Nick', 'John', 'Nick'],
        'Age': [25, 29, 35, 21],
        'City': ['New York', 'Paris', 'London', 'Berlin']}
df = pd.DataFrame(data)
print(df)
print("``````````````````````")
print(df[2:3])
print("``````````````````````")
for rr in df.values:
    print(rr)


Name  Age      City
0   Tom   25  New York
1  Nick   29     Paris
2  John   35    London
3  Nick   21    Berlin
``````````````````````
   Name  Age    City
2  John   35  London
``````````````````````
['Tom' 25 'New York']
['Nick' 29 'Paris']
['John' 35 'London']
['Nick' 21 'Berlin']

   3-1根据内容查询出对应的索引:  np.flatnonzero(df['Name'] == 'Nick')

data = {'Name': ['Tom', 'Nick', 'John', 'Nick'],
        'Age': [25, 29, 35, 21],
        'City': ['New York', 'Paris', 'London', 'Berlin']}
df = pd.DataFrame(data)
print(df)
print("``````````````````````")
d = np.flatnonzero(df['Name'] == 'Nick')
print(d)


   Name  Age      City
0   Tom   25  New York
1  Nick   29     Paris
2  John   35    London
3  Nick   21    Berlin
``````````````````````
[1 3]

   3-2根据内容查询出对应的行的内容:  df.loc[df['Name'] == 'Nick']

data = {'Name': ['Tom', 'Nick', 'John', 'Nick'],
        'Age': [25, 29, 35, 21],
        'City': ['New York', 'Paris', 'London', 'Berlin']}
df = pd.DataFrame(data)
print(df)
print("``````````````````````")
f = df.loc[df['Name'] == 'Nick']
print(f)


Name  Age      City
0   Tom   25  New York
1  Nick   29     Paris
2  John   35    London
3  Nick   21    Berlin
``````````````````````
   Name  Age    City
1  Nick   29   Paris
3  Nick   21  Berlin

DataFrame   增删改

2.3.1  行的操作

    1.1  添加行 

          pd._append(new_series, ignore_index =True)             ignore_index =True忽略标签意识

          返回一个新的DataFrame

lis_dic2 = {
   'offerId':[12078,18379,1817],
   'click':[1663,18492024,6379911],
}

pd2 = pd.DataFrame(lis_dic2)
new_series = pd.Series([999,1000],index=['offerId','click'])
pd3 = pd2._append(new_series, ignore_index =True)

    1.2  修改行

         pd.loc[行标签] = [列标签内容,列标签内容]     x 表示要修改的行标签,填写所有内容不用添加标签

        pd.locx[行位置] = [列位置内容,列位置内容,]    x 表示要修改的行标签,填写所有内容不用添加标签

        

lis_dic2 = {
   'offerId':[12078,18379,1817,999],
   'click':[1663,18492024,6379911,1000],
}

pd2 = pd.DataFrame(lis_dic2)
pd2.loc[2] = [1819,181918]

    1.3  删除行

       pd.drop([x]),   X表示要删除的行号,可以是多行,删除返回一个新的DataFrame

lis_dic2 = {
   'offerId':[12078,18379,1817,999],
   'click':[1663,18492024,6379911,1000],
}
pd2 = pd.DataFrame(lis_dic2)
pd3 = pd2.drop([2])

2.3.2  列的操作

     1.1  新增/修改 列

          方式1: df['列标签'] = 新列

          方式2:  pd.loc[:,'列标签'] =新列   

         如果DataFrame 不存在这一列,则新增一列; 如果DataFrame存在这一列则修改值;

new_result = DataFrame(result,columns=['sourceManager','sex','tel'])   #  新增一个列
new_result['tel'] = ['15829041959','15829041969','15829041979','15829041989']   新增这一列赋值;

    1.2  删除列

           pd.drop([x],axis=1),     X表示要删除的列,删除返回一个新的DataFrame

lis_dic2 = {
   'offerId':[12078,18379,1817,999],
   'click':[1663,18492024,6379911,1000],
}
pd2 = pd.DataFrame(lis_dic2)
pd2.loc[:,'sourceManager'] = ['ber','amie','terch','lisi']
pd3 = pd2.drop(['click'],axis=1)

DataFrame   数据查询

2.4.1         df.nlargest(n,columns)          按照columns 指定的列进行降序排序,并取前N行数据;

2.4.2         df.nsmallest(n,columns)       按照columns 指定的列进行升序排序,并取前N行数据;

lis_dic2 = {
   'offerId':[12078,18379,1817,999],
   'click':[1663,18492024,6379911,1000],
}
pd2 = pd.DataFrame(lis_dic2)
pd3 = pd2.nsmallest(2,'click')

2.4.3   按条件查询:

          方式1: pd3 =pd2.loc[ 查询条件 ]

          方式2: pd2.query(查询条件)

lis_dic2 = {
   'offerId':[12078,18379,1817,999],
   'click':[1663,18492024,6379911,1000],
}
pd2 = pd.DataFrame(lis_dic2)
pd3 =pd2.loc[(pd2['click'] >1500)& (pd2['click'] < 6379912)]
pd4 = pd2.query('click > 1500 & click< 6379912')

2.4.4   分组聚合

     方式1:pd2.groupby(列标签,···). 列标签 . 聚合函数()

    按指定列分组,并对分组数据的相应列进行相应的聚合操作;

     

lis_dic2 = {
   'offerId':[12078,18379,1817,999],
   'click':[1663,18492024,6379911,1000],
   'sex':['A','B','A','B']
}
pd2 = pd.DataFrame(lis_dic2)
#  安装sex 字段分组, 求 ‘click’字段平均值
pd4 = pd2.groupby('sex').click.mean()

     方式2:pd2.groupby(列标签,···).agg({'列标签':'聚合函数()',······})

     按指定列分组,并对分组数据的相应列进行相应的聚合操作

   

lis_dic2 = {
   'offerId':[12078,18379,1817,999],
   'click':[1663,18492024,6379911,1000],
   'sex':['A','B','A','B']
}
pd2 = pd.DataFrame(lis_dic2)
# #  安装sex 字段分组, 求 'offerId'的个数 和 ‘click’字段平均值
pd3 = pd2.groupby('sex').agg({'offerId':'count','click':'mean'})

2.5 排序

2.5.1   将DataFrame 按照指定列的数据进行排序;ascending=False,降序,True,升序;

            pd2.sort_values(by='列标签',ascending=False)

lis_dic2 = {
   'offerId':[12078,18379,1817,999],
   'click':[1663,18492024,6379911,1000],
   'sex':['A','B','A','B']
}
pd2 = pd.DataFrame(lis_dic2)
# 排序
pd3 = pd2.sort_values('click',ascending=False)

2.5.2  将DataFrame 按照行标签进行排序;ascending=False,降序,True,升序;

           pd2.sort_index(ascending=True)

lis_dic2 = {
   'offerId':[12078,18379,1817,999],
   'click':[1663,18492024,6379911,1000],
   'sex':['A','B','A','B']
}
pd2 = pd.DataFrame(lis_dic2)
# 排序
pd4 = pd2.sort_index(ascending=True)

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

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

相关文章

9.嵌套路由

1.添加主路由main <template><div><!-- 页面布局 --><el-container><!-- 侧边栏 --><el-aside width"200px">Aside</el-aside><!-- 页面布局 右边 包括header 和main --><el-container><el-header>Head…

08:STM32----DMA数据转运

目录 1:简历 2:存储器映像 3:DMA基本结构 4: DMA转运的条件 5:DMA请求 A:DMA数据转运 1:连接图 2:数据转运DMA 3:函数介绍 4:步骤 5:代码 B:DMAAD多通道 1:连接图 2:结构图 3:函数介绍 4:代码 1:简历 DMA&#xff08;Direct Memory Access&#xff09;直接存储…

讲讲几道关于 TCP/UDP 通信的面试题

TCP &#xff08;1&#xff09;TCP 的 accept 发生在三次握手的哪个阶段&#xff1f; 如下图connect和accept的关系&#xff1a; accept过程发生在三次握手之后&#xff0c;三次握手完成后&#xff0c;客户端和服务器就建立了tcp连接并可以进行数据交互了。这时可以调用accep…

每日一题(链表的中间节点)

每日一题&#xff08;链表的中间节点&#xff09; 876. 链表的中间结点 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 如下图&#xff1a;可以定义两个结构体指针均从链表的头节点开始向后遍历&#xff0c;fast指针一次走两步&#xff0c;slow指针一次走一步&a…

RC电路(二):耦合

耦合仿真电路及波形 数值与输入方波宽度 之间满足&#xff1a;&#xff0c;将变成一个 耦合电路&#xff0c;输出波形可以跟随输入波形&#xff0c;电路如下图所示。 上图红框部分放大后如下图所示&#xff1a; 在 时&#xff0c; 由 &#xff0c;因电容电压不能突变(来不及…

第一方支付、第二方支付、第三方支付、第三方支付是什么?

我相信关于支付行业大家多多少少都有一些自己的理解&#xff0c;但是具体的一些名词如标题中的这些&#xff0c;第一方、第二方、第三方支付&#xff0c;到底指的是什么&#xff1f; 第一方支付 也就是现金支付&#xff0c;其本质的意义就是指货币支付&#xff0c;从最早出现货…

IDEA配置使用Gradle

IDEA如何配置 Gradle&#xff08;详细版&#xff09; 使用国内镜像仓库加速下载依赖包

docker-compose 部署nacos 整合 postgresql 为DB

标题docker-compose 部署nacos 整合 postgresql 为DB 前提&#xff1a; 已经安装好postgresql数据库 先创建好一个数据库 nacos&#xff0c;执行以下sql: /** Copyright 1999-2018 Alibaba Group Holding Ltd.** Licensed under the Apache License, Version 2.0 (the "…

为什么人与人之间的差距这么大?

前言 首先要明确的是&#xff0c;与身边的人相比&#xff0c;每个人的生活情况和经历都是不同的&#xff0c;有差距是非常正常的。因此&#xff0c;不需要过度关注自己与他人之间的差距。个人感受 在生活中&#xff0c;工作中&#xff0c;学习中&#xff0c;不免遇上一些各方…

2023年全国职业院校技能大赛信息安全管理与评估网络安全渗透任务书

全国职业院校技能大赛 高等职业教育组 信息安全管理与评估 任务书 模块三 网络安全渗透、理论技能与职业素养 比赛时间及注意事项 本阶段比赛时长为180分钟&#xff0c;时间为9:00-12:00。 【注意事项】 &#xff08;1&#xff09;通过找到正确的flag值来获取得分&#xff0c;f…

【防火墙】防火墙NAT Server的配置

Web举例&#xff1a;公网用户通过NAT Server访问内部服务器 介绍公网用户通过NAT Server访问内部服务器的配置举例。 组网需求 某公司在网络边界处部署了FW作为安全网关。为了使私网Web服务器和FTP服务器能够对外提供服务&#xff0c;需要在FW上配置NAT Server功能。除了公网…

java基于微信小程序的讲座预约系统的研究与实现

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 1 简介2 技术栈第三章 系统分析3.1初步需求分析 3.2 系统用例分析3.2.1 公告管理用例分析3.2.2 系…

Opencv手工选择图片区域去水印

QT 插件化图像算法研究平台的功能在持续完善&#xff0c;补充了一个人工选择图片区域的功能。 其中&#xff0c;图片选择功能主要代码如下&#xff1a; QRect GLImageWidget::getSeleted() {QRect ajust(0,0,0,0);if(image.isNull() || !hasSelection)return ajust;double w1…

数据转换器与其它工具格式转换功能的对比

网上看到有几篇介绍将KML数据转换为GIS其它格式或者将GIS其它格式转换为KML数据方法的文章&#xff0c;感觉好多的步骤,技巧和注意呀!头晕!其中还不包括工具的安装&#xff0c;破解!做个数据转换也真的是烧脑啊。下面也我介绍一下我们的工具GIS数据转换器-矢量的转换方法。我只…

微信仿H5支付

仿H5支付是指一种模拟原生H5支付流程的非官方支付方式。这种支付方式通常是由第三方支付服务提供商开发和维护的&#xff0c;目的是为了绕过官方支付渠道的限制&#xff0c;如费率、审核等问题。然而&#xff0c;由于仿H5支付并非官方授权和认可的支付方式&#xff0c;其安全性…

MPI之组通信

在前面的文章中&#xff0c;对点对点通信API进行了介绍&#xff0c;本文将对MPI组通信相关API进行介绍 一对多 Broadcast 将一个进程的数据广播到所有其他进程中&#xff0c;函数原型&#xff1a; int MPI_Bcast(void *buffer, int count, MPI_Datatype datatype, int root…

开源django+mysql+vue3前后端分离商城baykeShop使用指南

baykeShop开源商城系统 项目简介 baykeShop&#xff08;拜客商城系统&#xff09;是一款全开源Python栈商城系统&#xff0c;管理后台完全前后端分离重写以适配项目&#xff0c;前后端100%开源&#xff0c;后台前端采用开源SCUI开源库对接开发&#xff0c;美观、易用、符合当…

深入探索C语言自定义类型:打造你的编程世界

一、什么是自定义类型 C语言提供了丰富的内置类型&#xff0c;常见的有int, char, float, double, 以及各种指针。 除此之外&#xff0c;我们还能自己创建一些类型&#xff0c;这些类型称为自定义类型&#xff0c;如数组&#xff0c;结构体&#xff0c;枚举类型和联合体类型。 …

软件架构模式+系统架构

架构模式对比 分层模式 一般信息系统中最常见的4层划分如下&#xff1a; Presentation layer 表示层&#xff08;也就是UI层&#xff09;Application layer 应用层&#xff08;也就是服务层&#xff09;Business logic layer 业务逻辑层&#xff08;也就是领域层&#xff09;…

NS2安装及入门实例——(ns2.35 / Ubuntu20.04)

文章目录 一、ns2安装1、更新系统源2、准备工作3、下载安装包4、安装5、问题① 问题1② 问题2③ 问题3 6、安装成功7、环境配置 二、nam安装1、安装2、问题 三、实例 一、ns2安装 1、更新系统源 sudo apt-get update sudo apt-get upgrade2、准备工作 sudo apt-get install …