pythoncsv文件处理_Python处理ExcelCSV文件

Python处理Excel&CSV文件

前言

在今年很早的时候,写过一篇用 Python 玩 Excel 的文章,可以回顾《Python操作 excel ?应该这么玩!》

当时介绍了用 Pandas 库玩股票,在 Excel 中画出一个图来。

现在有了前几天爬取的王者荣耀 csv 文件,还需要用 pandas 库来操作处理下。

实战中去体会这些第三方库的使用技巧,印象才会比较深刻。

环境准备

开始之前,首先确保你安装了 pandas 库。

pip install pandas

简单用官网介绍的文字来说明下,何为 pandas?Pandas是一个开源的,BSD许可的库,为Python编程语言提> > 供高性能,易于使用的数据结构和数据分析工具。

https://www.pypandas.cn/intro/

pandas中文官网

处理数据

有些时候,使用一些工具类的库,如何才能更好地练手?

一旦有了使用场景,那么,便是最好的练手机会。(再次强调)

现在我的需求很明确了:

有一个王者荣耀的 csv 数据,我需要将其读取到,然后将字典类型变成列,同时,需要让头像下载后自动写进 Excel 中。

而 Excel 的数据最终会提供给玩王者的朋友们, 也为了后续的分析而用。

1.pd.read_csv()

import pandas as pd

df = pd.read_csv(path) # 读取 csv 文件,看返回的是什么?

打个断点看下,df最终返回的结果:

查看 debug 面板,df 的类型是 DataFrame。

来看下官网是如何介绍的?

如果还不理解,你可以把 DataFrame 想成 Excel 中的 Sheet 页,它有着行和列,所以称之为二维异构表格。

2.df['列名'] 获取单列

在原来的 csv 中,有两列是字典类型的,现在需要将每列的每行数据取出来,并且生成新的列,而列名就是字典中的 key ,单列的每行数据则是字典中的 value。

attr_details_data_dict = df['attr_details_data_dict'] # 获取单列

取出来则是单列,而类型是 Series ,一维同构数组。(看上面官方的图介绍)

3.pd.DataFrame(dict) 创建新的DataFrame

detail_col_list = []

for detail_str in attr_details_data_dict:

detail_df = pd.DataFrame(json.loads(detail_str), index=[0])

detail_col_list.append(detail_df)

不难发现,现在的单列数据中每行看似都是 dict 类型的,但用 for 循环遍历时,取出的数据则是 str 类型,所以要用 json 库转换成 dict。

在用 pd.DataFrame 来构造新的 DataFrame,需要注意,构造时,dict 中的 value 值必须是可迭代的类型,比如 list 等,不然会报错:

由于现在 dict 中的 value 是单个字符串,所以需要加上 Index=[0] 的参数,方可解决问题。

这样最终构造出来的每个单独的 DataFrame,我们将其追加到一个列表中,便于后续合并使用。

4.pd.concat([df1,df2....]) 合并DataFrame

new_detail_df = pd.concat(detail_col_list, axis=0, ignore_index=True)

参数 axis=0 表示上下合并,1表示左右合并,ignore_index=True表示忽略原来的索引。

最终,你可以看到由 list 中多个 df 上下合并而成大的 df,和 csv 中的顺序一致,数据一致。

PS : 关于这里的 for 循环,如果你会列表表达式,可以写成一行处理,很简洁:

detail_col_list = [pd.DataFrame(json.loads(detail_str), index=[0]) for detail_str in attr_details_data_dict]

上面四步骤是在处理原来英雄的初始化数值的参数。

原 csv 中还有一列,也是 dict 类型,类似处理即可。

当然如果你对 Excel 处理,以上的后三部也是适用的。

pandas写入Excel

写入 Excel 之前,我们有一项工作没有做,就是将我们新增的列合并到原有的 df 上去,把原来 df 中的两个 dict 列去除掉。

1.去除 df 中的某列。df.drop(['列名'],axis=1)

df2 = df.drop(['attr_details_data_dict', 'recommand_stars_dict'], axis=1) # 删除已经处理过的列

print(df2.columns) # 打印列名

2.将新增列合并删除后的列上。

依然采用 concat 函数去做合并,这次是左右合并,所以 axis=1 ,列合并(左右), axis=0,行合并(上下)。

# 合并新旧列

final_df = pd.concat([df2, new_detail_df, new_recommend_df], axis=1)

结果:

3.写入 Excel

写入操作很简单,只需要如下:

final_df.to_excel('xxx.xlsx')

总结

pandas的操作,已经有了中文的官方文档,非常友好,大家可以对照中文文档去看下。

关于 Excel 中的头像下载,以及 Excel 的数据清理,放在下一篇文章中讲解。本篇内容长度足矣了,不继续写了。

老规矩,本章代码已经上传到 github 上,公号后台回复 王者数据 ,即可获得源码和excel文件!

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

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

相关文章

对比两个字符串相等_字符串匹配问题

0.题目在一个主串S{a, b, c, c, b, c, a, b, d}, 模式串T{a, b, d};请找出模式串在主串中第一次出现的位置提示: 不需要考虑字符串大小写问题,字符均为小写字母第一次在7的位置匹配上1.BF算法Brute-Force算法,简称为 BF算法,是一种简单朴素的…

eclipse 导入maven项目_解决Eclipse导入JAVA WEB项目错误的问题

蓝字关注远浩老师一、 本文问题在开发中不可避免地要涉及导入项目。Eclipse作为常用开发工具,导入JAVA WEB项目文件也很方便,但是我们经常发现导入完的项目有红色的叉来做错误提醒,甚至一些代码也出现错误提示的红线,如下图。 为了…

并发执行变成串行_大神浅谈数据库并发控制 锁和 MVCC

在学习几年编程之后,你会发现所有的问题都没有简单、快捷的解决方案,很多问题都需要权衡和妥协,而本文介绍的就是数据库在并发性能和可串行化之间做的权衡和妥协 - 并发控制机制。如果数据库中的所有事务都是串行执行的&#xff…

docker 部署_Nginx K8s + Docker 部署 ,虚拟机部署教程。

Nginx K8s Docker 部署 ,虚拟机部署教程!Linux 虚拟机 部署1、下载nginx:http://nginx.org/download/2、选择一个版本进行下载:wget http://nginx.org/download/nginx-1.14.0.tar.gz3、解压:tar -xvf nginx-1.14.0.tar.gz4、安装…

双机热备_双机热备软件哪个好?双机热备软件推荐

服务器维护和管理是企业健康稳定运营的一项重要工作,而双机热备可以提供服务器的高可用性。但是成熟好用的双机热备软件有哪些呢?下面就给大家推荐几款。微软MSCSMSCS(Microsoft Cluster Service)实际上是微软自带的,不…

Json和Xml

一、前言 学习心得&#xff1a;C# 入门经典第8版书中的第21章《Json和Xml》 二、Xml的介绍 Xml的含义&#xff1a; 可标记性语言&#xff0c;它将数据以一种特别简单文本格式储存。让所有人和几乎所有的计算机都能理解。 XML文件示例&#xff1a; <?xml version"1.…

ec20驱动_物联网基础:移远EC20固件升级

使用移远 QFlash_V4.14 工具升级移远 EC20 4G模块固件1 准备工作 1.1 EC20 USB驱动安装安装过程参考移远官方手册&#xff1a;《Quectel_LTE&5G_Windows_USB_Driver_安装指导_V1.0.pdf》&#xff0c;有详细USB安装指导&#xff0c;该手册及驱动文件可以去移远官方下载或后续…

的微波感知_上海交大彭志科教授团队研发:微波微动监测与智能感知技术

上海9月18日电(葛俊俊) 准确监测方舱医院大量感染患者的生命状况&#xff0c;精确“诊断”大桥工程结构是否存在安全隐患&#xff0c;随时随地获取独居老人在家的健康体征……上海交通大学彭志科教授团队研发的基于微波感知的微动监测与环境智能前瞻技术&#xff0c;像一种神奇…

win32键盘输入python_python-win32api键盘输入教程

importwin32guiimportwin32conimportwin32api#从顶层窗口向下搜索主窗口&#xff0c;无法搜索子窗口#FindWindow(lpClassNameNone, lpWindowNameNone) 窗口类名 窗口标题名 handle win32gui.FindWindow("Notepad", None)#获取窗口位置 left, top, right, bottom win…

小米笔记本引导修复_知识帖,笔记本电脑不能开机?你可以试试这些办法

大家经常遇到电脑开机不能进入系统的时候是不是特别难受,朝歌后面几篇文章会讲讲一些常见的电脑问题和解决办法啦 前面有一个系列的文章都是在组装电脑的问题,大家感兴趣的可以关注了去主页看看呀 在现在的日常生活里,笔记本电脑对于很多人来说会比台式机重要的多,因为笔记…

java同步锁synchronized_synchronized、锁、多线程同步的原理是咋样的?

先综述个结论&#xff1a;一般说的synchronized用来做多线程同步功能&#xff0c;其实synchronized只是提供多线程互斥&#xff0c;而对象的wait()和notify()方法才提供线程的同步功能。一般说synchronized是加锁&#xff0c;或者说是加对象锁&#xff0c;其实对象锁只是synchr…

ming window 交叉编译_如何在Linux for Windows上与MinGW交叉编译?

我正在尝试使用MinGW在Linux上编译Windows的Qt5应用程序.我正在使用Travis-CI来获得两个Windows可执行文件(win32,win64)的连续构建.我已经建立了一个构建矩阵,其中包含不同MinGW依赖项的定义.安装前部分定义了Qt,MinGW和gcc依赖项.在安装期间获取包.这是我的.travis.yml&#…

pacman 查询_掌握pacman包管理工具,玩转Arch Linux

前言在Arch/Manjaro系统中&#xff0c;包管理是使用pacman进行管理的。常用命令列出已经安装的软件包pacman -Q查看virtualbox包是否已经安装pacman -Q virtualbox查看已安装的包virtualbox的详细信息pacman -Qi virtualbox列出已安装包virtualbox的所有文件pacman -Ql virtual…

python追加_如何在Python中追加文件?

慕田峪7331174 您需要在附加模式下打开文件&#xff0c;方法是将“a”或“ab”设置为模式。见open&#xff08;&#xff09;。使用“a”模式打开时&#xff0c;写入位置将始终位于文件末尾&#xff08;附加&#xff09;。您可以使用“a ”打开以允许读取&#xff0c;向后搜索和…

系统相机裁剪比例_拍不出好照片,你缺的不是好手机而是相机设置的秘笈

玩转手机摄影&#xff0c;每天分享原创的手机摄影教程&#xff0c;手机相机功能、人像、风光、夜景、创意拍摄技巧&#xff0c;还有后期调色、修图等教程&#xff0c;欢迎感兴趣的朋友点击右上角&#xff0c;关注我们&#xff01;--------------------------------------------…

python给函数添加属性_如何在python中自动向类添加属性?

我有一个具有很多属性的类&#xff0c;这些属性在instanciating(init)时提供。看起来像这样&#xff0c;但还有大约30个attr&#xff1a;class SomeObject:def __init__(self,first,second):self.first firstself.second second工作正常&#xff0c;但很长很重复&#xff0c;…

任意点 曲线距离_中级数学11-曲线函数

距离、中点、圆抛物线椭圆双曲线非线性方程曲线本章介绍曲线及其性质。这里应用两圆锥体构成的推覆体与一个平面相交的截面&#xff0c;形成的曲线。从左到右截面&#xff1a;圆、抛物线、椭圆、双曲线距离、中点、圆应用勾股定理可求出三角形各边的长度。同样在直角坐标系中&a…

opencv 边缘平滑_基于OpenCV的车道检测实现(一)

无人驾驶的话题日趋起热&#xff0c;而车道线检测对于无人驾驶的路径规划来讲特别重要。要遵守交通规则&#xff0c;首先的要求便是对车道线检测&#xff0c;而且通过检测车道线可以进一步的检测地面指示标志、进行前碰撞预警策略设计等。早早就对OpenCV感兴趣&#xff0c;但迟…

字符串equal_Java String:字符串常量池

作者&#xff1a;Seven_Nee来自&#xff1a;https://segmentfault.com/a/1190000009888357作为最基础的引用数据类型&#xff0c;Java 设计者为 String 提供了字符串常量池以提高其性能&#xff0c;那么字符串常量池的具体原理是什么&#xff0c;我们带着以下三个问题&#xff…

cubemx串口的发送与接收_串口收发模块设计

串口收发模块设计作者&#xff1a;巩文宏 公众号&#xff1a;数字积木 该串口收发模块有串口发送模块&#xff0c;串口接收模块&#xff0c;波特率生成模块&#xff0c;发送数据fifo模块&#xff0c;接收数据的fifo模块组成。 默认配置下&#xff0c;要求输入的参考时钟为50MHz…