Pandas库常用函数和操作

2023-11-10

 


 

1. DataFrame 处理缺失值  dropna()

df2.dropna(axis=0, how='any', subset=[u'ToC'], inplace=True)

把在ToC列有缺失值的行去掉

 

补充:还可以用df.fillna()来把缺失值替换为某个特殊标记

df = df.fillna("missing")  # 用字符串替代
df = df.fillna(df.mean())  # 用均值或者其它描述性统计值替代

 

2. 根据某维度计算重复的行   duplicated()value_counts()

print df.duplicated(['name']).value_counts()  # 如果不指定列,默认会判断所有列
"""
输出:
False    11118
True       664
表示有664行是重复的
"""

duplicated()方法返回一个布尔型的Series,显示各行是否为重复行,非重复行显示为False,重复行显示为True

value_counts()方法统计数组或序列所有元素出现次数,对某一列统计可以直接用df.column_name.value_counts()

 

3. 去重  drop_duplicates()

df.drop_duplicates(['name'], keep='last', inplace=True)
"""
keep : {‘first’, ‘last’, False}, default ‘first’
    first : Drop duplicates except for the first occurrence.
    last : Drop duplicates except for the last occurrence.
    False : Drop all duplicates.
"""

 

4. 拼接

(1) 拼接列 merge()

result = pd.merge(left, right, on='name', how='inner')
"""
其它参数:
pd.merge(left, 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)

Examples
>>> A              >>> B
    lkey value         rkey value
0   foo  1         0   foo  5
1   bar  2         1   bar  6
2   baz  3         2   qux  7
3   foo  4         3   bar  8

>>> A.merge(B, left_on='lkey', right_on='rkey', how='outer')
   lkey  value_x  rkey  value_y
0  foo   1        foo   5
1  foo   4        foo   5
2  bar   2        bar   6
3  bar   2        bar   8
4  baz   3        NaN   NaN
5  NaN   NaN      qux   7
"""

其它参考:Merge, join, and concatenate

 

(2) 拼接行 

def concat_by_row(data_dir, fout):
    dfs = []
    for filename in os.listdir(data_dir):
        dfs.append(pd.read_excel(os.path.join(data_dir, filename)))
        print(dfs[-1].shape, filename)
    df = pd.concat(dfs, axis=0, ignore_index=True)  # axis=0按行拼接;axis=1按列拼接
    print(df.shape)
    df.to_excel(fout, index=False)

 

5. 找出在某一特定维度为空值的所有行

bool_arr = df.name.notnull()
print bool_arr.value_counts()
for idx, value in bool_arr.iteritems():
    if not value:
        print '\n', idx, value
        print df.iloc[idx]

 

6. 指定dataframe的维度及顺序; 保存数据csv文件

res = {'name':[], 'buss':[], 'label':[]}
with codecs.open(fname, encoding='utf8') as fr:
    for idx, line in enumerate(fr):
        item = json.loads(line)
        res['name'].append(item['name'])        
        res['buss'].append(item['buss']) 
        res['label'].append(item['label'])
df = pd.DataFrame(res, columns=['name', 'buss', 'label'])
df.to_csv('data/xxx.csv', index=False, encoding='utf-8')

 

7. 保存到文件

7.1 读写excel/csv格式文件

import pandas as pd

def dataframe_read_and_write(fin, fout):  # 读取fin文件,添加一列"新应答"
    df = pd.read_excel(fin)
    # df = read_csv(fin, encoding='utf-8')
    print df.head()

    fields = [u"序号", u"问题描述", u"原始应答", u"新应答"]
    data_out = defaultdict(list)

    for idx, row in df.iterrows():
        try:
            row = row.to_dict()
            new_answer = "xxxxxx"
            for field in fields[:-1]:
                data_out[field].append(row[field])
            data_out[fields[-1]].append(new_answer)
        except Exception as error:
            print "Error line", idx, error

    df_out = pd.DataFrame(data_out, columns=fields)
    df_out.to_excel(fout, sheet_name="Sheet1", index=False, header=True)
    # df_out.to_csv(fout, index=False, encoding="utf-8")


if __name__ == '__main__':
    dataframe_read_and_write(fin="data/tmp.xlsx", fout="data/tmp_out.xlsx")

 

7.2 将多张DataFrame表写入到同一个excel文件的不同sheet中

import pandas as pd
writer = pd.ExcelWriter('foo.xlsx')
df.to_excel(writer, 'Data 0')
df.to_excel(writer, 'Data 1')
writer.save()

 

7.3 向一个已经存在的excel文件中写入一张新sheet;如果文件不存在则创建一个新文件再写入

import pandas
from openpyxl import load_workbook


def add_new_sheet(df, fout, sheet_name='Sheet1', columns=None):
    if fout and os.path.exists(fout):
        book = load_workbook(fout)
        writer = pd.ExcelWriter(fout, engine='openpyxl')
        writer.book = book
        writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
    else:
        writer = pd.ExcelWriter(fout)
    df.to_excel(writer, sheet_name=sheet_name, columns=columns, index=False)
    writer.save()
    
    
add_new_sheet(df, fout='Masterfile.xlsx', sheet_name="Main", columns=['Diff1', 'Diff2'])    

参考:官方解决方案https://github.com/pandas-dev/pandas/issues/3441

 

7.4 读取excel文本中的多个sheet

import xlrd

workbook = xlrd.open_workbook(fin)
for sheet in workbook.sheets():
    df = pd.read_excel(fin, sheet_name=sheet.name, index_col=None)

 

8. 排序

def sort_dataframe(df, fields_to_sort, fout=None):
    df = df.sort_values(by=fields_to_sort, ascending=True)
    if fout:
        df.to_excel(fout, index=False)
    return df

df = pd.read_excel(data_file)
sort_dataframe(df, fields_to_sort=["column_A", "column_B"], fout=data_file)

df = pd.read_excel(data_file)  # note: index改变,需要从文件重新读取,才会是有序的,后面遍历df的时候才不会出问题
print(df.head(10))

 

9. 轴标签重命名 df.rename()(列重命名、行index重命名)

>>> df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})
>>> df.rename(index=str, columns={"A": "a", "B": "c"})
   a  c
0  1  4
1  2  5
2  3  6

>>> df.rename(index=str, columns={"A": "a", "C": "c"})
   a  B
0  1  4
1  2  5
2  3  6

Using axis-style parameters

>>> df.rename(str.lower, axis='columns')
   a  b
0  1  4
1  2  5
2  3  6

>>> df.rename({1: 2, 2: 4}, axis='index')
   A  B
0  1  4
2  2  5
4  3  6

参数说明:

  df.rename()参数说明

 

10. 数据选取,修改,切片

10.1 loc

在知道列名字的情况下,df.loc[index,column] 选取指定行,列的数据

# df.loc[index, column_name],选取指定行和列的数据
df.loc[0,'name'] # 'Snow'
df.loc[0:2, ['name','age']]          #选取第0行到第2行,name列和age列的数据, 注意这里的行选取是包含下标的。
df.loc[[2,3],['name','age']]          #选取指定的第2行和第3行,name和age列的数据
df.loc[df['gender']=='M','name']      #选取gender列是M,name列的数据
df.loc[df['gender']=='M',['name','age']] #选取gender列是M,name和age列的数据

10.2 iloc

在column name特别长或者index是时间序列等各种不方便输入的情况下,可以用iloc (i = index), iloc完全用数字来定位 iloc[row_index, column_index]

df.iloc[0,0]        #第0行第0列的数据,'Snow'
df.iloc[1,2]        #第1行第2列的数据,32
df.iloc[[1,3],0:2]    #第1行和第3行,从第0列到第2列(不包含第2列)的数据
df.iloc[1:3,[1,2]    #第1行到第3行(不包含第3行),第1列和第2列的数据

更多参考:

https://blog.csdn.net/yoonhee/article/details/76168253

 

11. 判断某个cell是否为空

if str(line["col_a"]).strip() == "nan":
    pass 

 

12. Dataframe值替换

df["col_a"] = df["col_a"].replace({"b": "C", "e": "G"})

 

更多参考:https://jingyan.baidu.com/article/454316ab4d0e64f7a6c03a41.html

 

13. Dataframe筛选数据

df2 = df[df["col_a"] == "cc"]  # 等于某个值
df3 = df[df["col_a"].isin(["bb", "cc", "ee"])]  # 取值在某个范围内

 

更多参考:https://jingyan.baidu.com/article/0eb457e508b6d303f0a90572.html

 

14. 其它常用操作

    # df = pd.read_csv("../../data/data_part1.txt", sep="$")
    df = pd.read_csv("data/data_part1.csv", low_memory=False)

    # 数据概览
    df.info()
    df.describe()  # ==> 只显示float型维度的[count, mean, std, min]等统计信息, 例如0108, 3816, 2453, 0112, 2428, 2304

    # 数据查看
    df.head(n=5)  # 查看开头几行, 默认n=5
    df.tail(n=5)  # 查看末尾几行, 默认n=5
    df.shape  # 查看行列维度
    df.columns  # 查看列名和列数
    df.dtypes     # 查看数据类型   ==> 可以看到哪些维度的数值是object型/float型
    df["0108"].hist()  # 查看变量分布
    df["0108"].unique()  # 查看有哪些取值
    df["0108"].value_counts()  # 查看这一列的值统计

    # 缺失值统计
    df.isnull().sum()  # 查看每一列缺失值情况
    df["n_null"] = df.isnull().sum(axis=1)  # 查看每一行缺失值情况

    # 缺失值填充
    mode_df = df.fillna(df.mode().iloc[0], inplace=True)  # 用众数填充
    median_df = df.fillna(df.median())  # 用中位数填充
    df["0108"][df.vid.isnull()] = "0"  # 对某一列填充

 

15. 遇到的问题和解决方法

15.1  df.to_excel(fout) 报错"openpyxl.utils.exceptions.IllegalCharacterError"

(step 1)  pip install xlsxwriter 

(step 2) df.to_excel(fout, engine="xlsxwriter") 

 

15.2  保存文件时报错"UserWarning: Ignoring URL 'http://www.xxxxxxx' with link or location/anchor > 255 characters since it exceeds Excel's limit for URLS"

writer = pd.ExcelWriter(fout, engine="xlsxwriter", options={'strings_to_urls': False})
df.to_excel(writer, index=False)
writer.save()

 

 

参考:

https://blog.csdn.net/wangquannuaa/article/details/43988719

https://blog.csdn.net/wangquannuaa/article/details/43984095

 
分类:  Python
 
好文要顶  收藏该文   
 
 
+加关注
 
 
 
« 上一篇: [Linux] 终端设置只显示当前目录及终端美化
» 下一篇: awk结合正则匹配
posted @  2017-08-02 16:04 焦距 阅读(2568) 评论(0) 编辑 收藏
 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas库常用函数和操作 的相关文章

  • 打靶练习:DC-1

    文章目录 主机发现和nmap信息收集 web信息收集 漏洞扫描 密码爆破 获得系统立足点 MySQL渗透 web渗透 用户提权 总结 主机发现和nmap信息收集 主机发现 kali kali sudo arp scan l 查找到主机地址为
  • 计算机最最基础的原理

    这是一篇知乎的文章详细的介绍了电子计算机运算器加减的原理及存储的原理 作者 张大昭 链接 https www zhihu com question 20112194 answer 84394468 来源 知乎 著作权归作者所有 商业转载请联
  • Heroku登录失败

    Heoku 在国内 注册和登录是个大问题 不知道原来怎么注册上了 如今需要登录删除 app 就是删除不了 今天努力找了个vpn 无奈还是登录不成功 https id heroku com login 在群里问了下有人能上 就知道肯定设置的有
  • Android Update Engine 分析(二十)为什么差分包比全量包小,但升级时间却更长?

    本文为洛奇看世界 guyongqiangx 原创 转载请注明出处 原文链接 https blog csdn net guyongqiangx article details 132343017 0 导读 时不时有同学在 OTA 讨论群和 V
  • 华为OD机试真题-机房布局/栈解法【2023.Q1】

    小明正在规划一个大型数据中心机房 需要满足的条件是 确保在每个机柜边上至少要有一个电箱 已知 机房排成1排 我们用M表示机柜 I表示间隔 请你返回这整排机房 至少需要多少个电箱 如果无解请返回 1 输入描述 第一行输入一个字符串 由 M 和
  • SqliLabs Less21-22

    第二十一关 基于单引号和括号 64位编码的密码注入 1 判断注入点 有了20关的经验 输入爆破账户 admin密码 admin后抓包 发现admin输入为YWRtaW4 3D 根据提示用64位数据解码得到YWRtaW4 用url编码 为 3
  • 新老域名更替时的页面跳转

    不少站长都有换域名的经历 新买的www xxx com的域名和老域名都已经绑定在空间上了 但老域名总是不敢轻易拿掉 更换的话 跟老域名相关的所有链接都将失效 出现404的页面非常不友好 用户也将找不到原来的内容 其实用JS跳转功能可以帮站长
  • 机器学习零基础?手把手教你用TensorFlow搭建图像识别系统

    转 http www leiphone com news 201701 Y4uyEktkkwb5YhJM html http www leiphone com news 201701 2tH3DgLmsGhnDd8D html 导语 这是W
  • 基于nb-iot和arduino的气象站(一)

    基于nb iot和arduino的气象站 一 温湿度和紫外线传感器 上一篇已经介绍了项目的大概情况 这一篇先讲温湿度传感器和紫外线传感器的使用 一 温湿度传感器 我使用的温度传感器为DHT21 DHT21数字温湿度传感器是一款含有已校准数字
  • [Java基础系列第5弹]Java多线程:一篇让你轻松掌握并发编程的指南

    多线程是一种编程技术 它可以让一个程序同时执行多个任务 从而提高程序的性能和效率 但是 使用Java多线程也不是一件容易的事情 它涉及到很多复杂的概念和问题 如线程安全 同步 锁 原子类 并发集合 生产者消费者模式 线程池模式 Future
  • 企业级Vue路由角色权限应该怎么做?

    角色权限 角色权限 简单来说就是登录的用户能看到系统的哪些页面 不能看到系统的哪些页面 一般是后台管理系统才会涉及到如此复杂的角色权限 对于 vue 技术栈 实现角色权限一般有两种方式 第一种是利用 beforeEach 全局前置守卫 第二
  • Unity的初次接触(一)

    Unity界面介绍 首先当我们安装完成Unity后 会呈现出这样的界面 第一步是点击右上角的New按钮 创建新的项目 然后你会看到这个界面 从左到右 从上到下依次是 项目名称 选择模板 项目保存的路径 添加资源包 创建这个项目的组织 启动u
  • idea中Vue的v-on报错

    虽说并不影响代码的执行结果 但是作为强迫症的你们肯定很不爽 解决方法 直接添加 只针对v on 其他还需添加 xmlns v on http www w3 org 1999 xhtml Settings gt Inspections gt
  • React 环境搭建以及创建项目工程(二)

    创建工程 首先创建一个工程 npx create react app weibo cd移动到当前创建的文件下 cd weibo 安装 React 路由 npm install react router react router dom 5
  • 微信小程序实现保存图片到本地

    wxml代码
  • PySyft中model.get()方法解释

    最近在看联邦学习相关内容 上手了PySyft框架 该框架相当于是在Pytorch深度学习框架上扩展的第三方API 对我经常使用Pytorch深度学习框架的人来说再合适不过 然后在网上找各种帖子学习了一点基础的东西 其中有一篇比较经典的帖子是
  • 算法(1)---八大排序算法

    一 选择排序 定义 从待排序的数据中 按指定的规则选出某一个元素 再依规定交换位置后达到排序的目的 核心思想 从全部序列中选取最小的 与第0个元素交换 然后从第1个元素往后找出最小的 与第一个元素交换 再从第2个元素往后选取最小的 与第二个
  • oracle 查询表空间所有表、及表所有的表空间

    查询表空间所有表 select table name from all tables where TABLESPACE NAME 表空间 表空间名字一定要大写 查询表所在的表空间 select from user tables where
  • Iframe postMessage 日志

    postMessage catcher 之前工作需要接入不同 iframe 需要使用 postMessage 来进行通信 本地开发还好可以方便打印相互通信的数据 就是线上有些麻烦 不好直接观察发送和接收的数据是怎么样的 所以写了个 chro
  • 设置Linux服务器登录密码过期时长

    设置Linux服务器登录密码过期时长 登录服务器时 提示登录密码过期 必须修改密码重新登录 You are required to change your password immediately password aged You mus

随机推荐

  • Python-Dataframe使用已知数据填补空值

    作为大气遥感的一员 研究的对象主要是排放栅格图像 因此本文主要针对栅格图像来对其NaN空值进行有选择的填补 在处理数据时遇到一个问题 当一个栅格图像只有很小一部分存在有用值 可能10000多个栅格区域只有300个有有效值 此背景下给一个假设
  • 动手篇

    简介 本文讲述如何在麒麟v10 SP2安装达梦8版本数据库 安装操作系统 麒麟v10 SP2 root 192 bin uname a Linux 192 168 220 110 4 19 90 24 4 v2101 ky10 x86 64
  • 消息不能及时回复,见谅

    由于公司网络原因 无法登陆具有上传功能的平台比如百度云 CSDN等 所以消息多半无法及时回复 见谅 博客及记录包括转载 摘录内容本人暂时在github上 内容如果涉及你的授权请及时与我联系 附github https github com
  • plsql Developer 设置 优化

    配置文件 PL SQL Developer 安装目录中的 params ini 文件 配置文件中的参数也是命令行参数 同时设置的话 命令行参数优先 这几个是可能会用的 nologon userid user password db inst
  • 版本号命名规范

    最近写文档被完虐 啊摔 老师不满意 还不好意思直接批评我 搞得自己很羞愧 所以我决定了要加强一下写作技能 首先从文件管理方面进行改进 首先就是版本号的管理规范 转自百度文库http wenku baidu com view 0f7d6b24
  • 小白学习kali linux day5(XSS漏洞学习)

    BEEF工具介绍 BEEF工具针对浏览器进行渗透测试 可以进行XSS漏洞攻击和利用 首先安装beef如下 首先安装beef xss工具 之后启动beef工具 绿色框框里为beef密码 可以为123 下图框框内的表示xss漏洞的钩子 ip应该
  • 126-----JS基础-----Location

    一 代码 很简单 看一下即可 注意 01 BOM html的代码在124节的Navigator中 只是一个简单的测试画面而已 自己随便弄一个测试也可以
  • 使用curl命令断点续传下载

    目录 使用curl命令断点续传下载 使用curl命令断点续传下载 curl exe C O
  • attachEvent报错原因

    document attachEvent is not a function出错的原因 报错原因有 1 利用attachEvent 直接在谷歌浏览器打开 我就是犯这种低级错误的 重要事情说三遍 attachEvent是IE浏览器独有的 at
  • IDEA2022.3设置自动生成类的serialVersionUID

    打开IDEA 点击File settings Editor Inspections 搜索seria 把这两个选上 然后点击apply ok 使用 选中你要生成的类 Alt Enter键自动提示 这个时候就有创建提示了
  • 网络TCP建立连接为什么需要三次握手而结束要四次

    举个打电话的例子 A 你好我是A 你听得到我在说话吗 B 听到了 我是B 你听到我在说话吗 A 嗯 听到了 建立连接 开始聊天 TCP连接的释放 四次挥手 数据传输完毕后 双方都可释放连接 最开始的时候 客户端和服务器都是处于ESTABLI
  • 牛客网多组输入问题怎么办?EOF使用方法

    需要云服务器等云产品来学习Linux的同学可以移步 gt 腾讯云 lt gt 阿里云 lt gt 华为云 lt 官网 轻量型云服务器低至112元 年 新用户首次下单享超低折扣 目录 1 什么是EOF 2 while getchar EOF
  • cocos2dx使用TiledMap模拟3D地图场景----斜45度2D地图的靠墙直线移动

    基于cocos2dx引擎的第三人称射击游戏 角色使用3D模型 地图采用2 5D 定制地图编辑系统抛开不谈 这里最大可能的挖掘现有工具TiledMap的潜力 完成超2 5D地图的实现 使用2D地图高度模拟3D场景 主要有两个要点需要解决 1
  • 面试官:Vue3有了解过吗?能说说跟Vue2的区别吗?

    一 Vue3介绍 关于vue3的重构背景 看看尤大怎么说 Vue 新版本的理念成型于 2018 年末 当时 Vue 2 的代码库已经有两岁半了 比起通用软件的生命周期来这好像也没那么久 但在这段时期 前端世界已经今昔非比了 在我们更新 和重
  • 用python画小花_用python的小海龟 Turtle 画一朵好看又有趣的小花-Go语言中文社区...

    1967年 Daniel G Bobrow Wally Feurzeig Seymour Papert 和 Cynthia Solomon 设计了LOGO编程语言 用一种直观的方式教孩子们学习编程 尽管该语言也可以解决复杂问题 但给大家留下
  • 关系代数内容学习(交、并、差、投影、选择、连接、重命名)

    关系代数 并 差 交 投影选择 笛卡尔积 连接 重命名 什么是关系代数 是一种抽象的数据查询语言 用对关系的运算来表达查询 关系运算符分类 传统的集合运算符 U N 把关系看成元组的集合 所有运算对象必须具有相同的结构 专门的关系运算符 选
  • AJAX学习笔记1发送Get请求

    传统请求有哪些方式 及缺点 传统请求有哪些 1 直接在浏览器地址栏上输入URL 2 点击超连接 a href 上下文 请求地址 超链接请求 a gt 相对路径 a href http www baidu com 超链接请求 a gt 绝对路
  • 进阶高级测试专项,Pytest自动化测试框架总结(三)

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • 电子信息毕设分享 STM32题目项目汇总 - 100例

    文章目录 1前言 2 STM32 毕设课题 3 如何选题 3 1 不要给自己挖坑 3 2 难度把控 3 3 如何命名题目 1前言 更新单片机嵌入式选题后 不少学弟学妹催学长更新STM32和C51选题系列 感谢大家的认可 来啦 以下是学长亲手
  • Pandas库常用函数和操作

    目录 1 DataFrame 处理缺失值 dropna 2 根据某维度计算重复的行 duplicated value counts 3 去重 drop duplicates 4 拼接 1 拼接列 merge 2 拼接行 5 找出在某一特定维