数据的写入与读取

  • 数据的写入
    • .csv文件写入
    • .xlsx文件写入
  • 数据的读取
    • .csv文件读取
    • .xlsx文件读取
  • 数据的使用
    • 随机获取信息
    • 数据去重

在做数据分析的时候,Excel表格是一个常用的工具,但是当数据文件数据量比较大时,Excel光是打开文件就需要花费很长的时间。此时,利用pandas就会变得非常高效。因此,本文将讨论利用pandas读取以及写入Excel。

数据的写入

之前的课程中,我们了解了pycharm可以将数据写入Excel和csv。其实,支持写入的文件格式还有HTML、JSON。
csv是最为常见的以纯文本文件存储数据文件的格式,它的优点是通用性很强,不受操作系统以及具体的软件的限制;Excel是一种非常常见的数据表格,因此本文也要介绍。

.csv文件写入

DataFrame格式的内容想要写入csv文件非常容易,只需要一个to_csv方法即可,而这个方法又是DataFrame自带的,不需要单独引用。下面给大家举例。

import pandas as pd
dic = {'ID':[1001,1002,1003,1001,1004,1005,1006,1004,1007,1008],'name':['张三','李四','王五','张三','赵六','孙七','周八','赵六','吴九','郑十'],'age':['18','19','30','18','20','22','25','20','21','16'],'high':['150.00','167.00','180.00','150.00','160.00','165.00','168.00','160.00','172.00','178.00'],'sex':['男','女','男','男','女','男','男','女','女','男']}
df=pd.DataFrame(data = dic,index = ['a','b','c','d','e','f','g','h','i','j'])
# 以下内容为写入csv文件
df.to_csv(path_or_buf='./People_Information.csv', encoding='utf_8_sig')
print('end')

其中,’./People_Information.csv’意思为新建名称为People_Information,保存路径为当前目录。如果我们想要保存到其他路径,可以在此电脑中打开要保存到的文件夹,复制路径,粘贴到这里的“./”前面并将’ \ ‘改为’/'即可。encoding='utf_8_sig’是规定编码方式为UTF-8。如果不做此设置,当我们打开文件时就会看到乱码,感兴趣的小伙伴可以自行尝试。
看看运行结果:

我们在当前目录文件下找到了csv文件,并且内容和输出结果一样。如果不希望在生成的csv文件中存储index中的索引信息,可以将其设置为false:

df.to_csv('./People_Information.csv',index=False,encoding='utf_8_sig')

这个方法中还有很多默认参数,需要实现不同功能是可以查看不同参数。注意要选择DataFrame类下的to_csv方法哦!
熟悉Excel的小伙伴们应该发现了,csv相当于是阉割版的Excel了,它只有一个sheet表,并且命名就是文件名。那么我们如何把DataFrame的数据存到Excel呢?

.xlsx文件写入

ExcelWriter是pandas下的一个方法,它可以在指定路径下创建一个.xlsx文件,并将其命名。运行一下试试看:

import pandas as pd
pd.ExcelWriter("D:./test.xlsx")

可以看到,我们已经在指定路径创建了一个test.xlsx文件了,只是无法打开。接下来我们继续为他填入数据,这个工作使用的方法是to_excel(excel_writer,sheet_name),需要把内容填到新建的.xlsx文件的指定工作表中,并将工作表进行命名。如果没给sheet_name参数赋值,系统会自动赋值为Sheet1。下面我们测试一下:

from pandas import Series,DataFrame
import pandas as pd
dic1 = {'ID':[1001,1002,1003,1001,1004,1005,1006,1004,1007,1008],'name':['张三','李四','王五','张三','赵六','孙七','周八','赵六','吴九','郑十'],'age':['18','19','30','18','20','22','25','20','21','16'],}
dic2 = {'high':['150.00','167.00','180.00','150.00','160.00','165.00','168.00','160.00','172.00','178.00'],'sex':['男','女','男','男','女','男','男','女','女','男']}
df1=pd.DataFrame(data = dic1,index = ['a','b','c','d','e','f','g','h','i','j'])
df2=pd.DataFrame(data = dic2,index = ['a','b','c','d','e','f','g','h','i','j'])
writer = pd.ExcelWriter("scores3.xlsx")
df1.to_excel(writer, "sh1")
df2.to_excel(writer)
writer.save()

看看运行结果:

数据的读取

以上我们介绍了数据存储到.csv文件和.xlsx文件,相信大家已经学会了如何写入数据了。下面我们就来学习如何读取数据。

.csv文件读取

我们以刚刚写好的两个文件做例子来研究如何读取数据。首先,想要读取.csv文件就需要使用pandas下的read_csv方法,直接上结果:

import pandas as pd
df = pd.read_csv('People_Information.csv')
print(df)
print(df.shape) # 显示输出端表格行列数

看看结果:

当然,有些时候表格会出现一些我们不喜欢的问题,比如第一行本来应该是行索引,但实际是乱码,如:

这时,如果我们还想显示刚才的结果,就需要让代码从第2行开始显示,做以下改动:

people = pd.read_csv('People1.csv',header = 1)
# header是默认参数,默认值为0,表示从第0刚开始输出

改动之后在运行程序,运行结果应该和刚才一样,这里就不展示图片了。
当然,如果.csv文件没有列索引,我们可以把header设置为none,让终端输出标签索引。

.xlsx文件读取

.xlsx文件的读取需要指定要读取的工作表,因此其读取的代码写成这样:

from pandas import Series,DataFrame
import pandas as pd
df = pd.read_excel('scores3.xlsx',sheet_name='Sheet1')
# df = df.loc[:, ~df.columns.str.contains('^Unnamed')]
print(df)

我们先来看看结果:

结果虽然是对的,但是有一个Unnamed破坏了阵型,导致读取的数据和实际想要的数据维度不匹配,想要删掉它,可以把上述屏蔽掉的代码加上。
实际上,sheet_name也是一个默认参数,如果我们不修改其值,他会自动输出第一个工作表的内容,大家可以试试看。

数据的使用

下面我们家是一个实际的场景,来应用数据读取。

随机获取信息

我们依然使用刚刚建立的Excel表格做例子。现在,我们需要在所有人中随机抽取三个进行点名:

from pandas import DataFrame
import pandas as pd
import random
df = pd.read_excel('scores3.xlsx',sheet_name='sh1')
df = df.loc[:,'name']
index_list = df.index.tolist() # 获取df的行索引并存储为列表
for i in range(0,3):value = index_list[random.randint(0,len(index_list)-1)]# 从0到列表长度-1的数中抽取随机数,如果不-1有可能会发生溢出msg = df.iloc[value]print(msg)

我晕醒了很多次,找到了一组有问题的输出:

尽管这个表格中有重复的数据,但是周八是独一无二的,这就是说随机取值是有放回抽样。如果一直运行下去,就会出现两个张三,或者三个赵六之类的现象,下面我们讲述如何避免这样的问题。

数据去重

列表中的数据有重复是一个比较烦人的现象。但是想解决这个问题也并不麻烦,我们可以将指定列转化为列表,然后进行列表去重:

from pandas import DataFrame
import pandas as pd
import random
df = pd.read_excel('scores3.xlsx',sheet_name='sh1')
val=df['name'].tolist() # 获取姓名,并转成list
print(val)
num = set(val) # 去重
print(num,'\n',len(num))

这样一番操作下来,没有重复数据的num就是一个set类型的数据了。如果需要的话可以使用list()强转为列表:

可以看到,我们已经去掉了重复的名字。下面我们填之前的坑,让输出的随机人员不重复:

from pandas import DataFrame
import pandas as pd
import random
df = pd.read_excel('scores3.xlsx',sheet_name='sh1')
val=df['name'].tolist() # 获取姓名,并转成list
num = list(set(val)) # 去重
sel=[]
while True:vallue = num[random.randint(0, len(num) - 1)]sel.append(vallue) # 将取到元素压入列表sel=list(set(sel)) # 列表去重if len(sel)==3:break
print(sel)

大家可以多试几次,检查一下。提示:可以加入计数器查看循环的次数。
如何去除真正重复的元素
上文我们讨论的去重,是依据某一列元素是否重复的去重,但是实际上,某一列的数据不足以代表数据是否重复,比如我现在对表格做一个修改:

尽管两个张三的名字和年龄一样,但ID是不同的,因此我们需要去充的时候把两个都留下来。这样的要求set()函数就不好帮我们处理了,我们可以手动写一段代码来判断重复与否:

from pandas import DataFrame
import pandas as pd
import random
cont=[]
F=1
df = pd.read_excel('scores3.xlsx',sheet_name='sh1')
for i in range(len(df.index.tolist())):# 注:range函数生成的数组末位即为len(df.index.tolist())-1,因此不需要额外-1val=df.loc[i,].tolist() # 获取姓名,并转成listfor j in range(len(cont)):if cont[j]==val:F=0 # 标记重复breakif F==1:cont.append(val)else:F=1
print('去重后元素数量为:%d'%len(cont))
df=DataFrame(cont,columns = ['ID','name','age'])
print(df)

运行测试一下:

本文给大家分享了pandas对.csv文件和.xlsx文件进行读写的操作,以及模拟了现实中可能会出现的一些场景,下次会继续给大家带来数据删除、空值处理等内容,喜欢的小伙伴关注一下吧~

数据分析:数据处理篇1相关推荐

  1. 【Python数据处理篇——DataFrame数据准备】DataFrame的创建、增删改查、数据导入等

    欢迎访问我搞事情的[知乎账号]:Coffee 以及我的[B站漫威剪辑账号]:VideosMan 若我的笔记对你有帮助,请用小小的手指,点一个大大的赞哦. 关于DataFrame的相关知识,我还进行了汇 ...

  2. 读书笔记:《谁说菜鸟不会数据分析-入门篇》第1-4章

    读书笔记:<谁说菜鸟不会数据分析-入门篇> 第一章:数据分析是神马 数据分析分类: 1.数据分析分类: 描述性数据分析:常见方法:对比分析法.平均分析法.交叉分析法 探索性数据分析–发现数 ...

  3. 数据分析入门篇(一)

    作者介绍 杭州@阿坤 母婴电商行业数据分析师兼数据产品经理: 致力于研究电商行业的数据驱动增长, 以及数据产品从0到1的搭建: "数据人创作者联盟" 成员. 01 数据分析简介 数 ...

  4. 【Python数据处理篇——DataFrame数据可视化】饼图、散点图、折线图、柱形图、直方图

    欢迎访问我搞事情的[知乎账号]:Coffee 以及我的[B站漫威剪辑账号]:VideosMan 若我的笔记对你有帮助,请用小小的手指,点一个大大的赞哦. 关于DataFrame的相关知识,我还进行了汇 ...

  5. 《谁说菜鸟不会数据分析——入门篇》读书笔记

    刘夏璐,狄松. 谁说菜鸟不会数据分析(入门篇)[M]. 电子工业出版社, 2013 文章目录 第一章 数据分析那些事 何谓数据分析 数据分析的作用 1.1 数据分析六部曲 1.1.1 明确分析的目的和 ...

  6. python解复杂方程_Python数据处理篇之Sympy系列(五)---解方程

    前言 sympy不仅在符号运算方面强大,在解方程方面也是很强大. 本章节学习对应官网的:Solvers 官方教程 (一)求解多元一次方程-solve() 1.说明: 解多元一次方程可以使用solve( ...

  7. ML之FE:利用【数据分析+数据处理】算法对国内某平台上海2020年6月份房价数据集【12+1】进行特征工程处理(史上最完整,建议收藏)

    ML之FE:利用[数据分析+数据处理]算法对国内某平台上海2020年6月份房价数据集[12+1]进行特征工程处理(史上最完整,建议收藏) 目录 利用[数据分析+数据处理]算法对链家房价数据集[12+1 ...

  8. 谁说菜鸟不会数据分析python下载_刻意练习9:《谁说菜鸟不会数据分析python篇》第3章编程基础总计46页学习笔记...

    学习计划MyPlan9 主题:<谁说菜鸟不会数据分析python篇>第3章节 编程基础,总计46页. 时间:7.15-7.21 周内完成 各位星友们,在这个星球里每个人都要逼迫自己学习未知 ...

  9. python 解方程 sympy_Python数据处理篇之Sympy系列(五)---解方程

    前言 sympy不仅在符号运算方面强大,在解方程方面也是很强大. 本章节学习对应官网的:Solvers 官方教程 (一)求解多元一次方程-solve() 1.说明: 解多元一次方程可以使用solve( ...

  10. python解二元一次方程_Python数据处理篇之Sympy系列(五)---解方程

    前言 sympy不仅在符号运算方面强大,在解方程方面也是很强大. 本章节学习对应官网的:Solvers 官方教程 https://docs.sympy.org/latest/tutorial/solv ...

最新文章

  1. document.all与WEB标准
  2. 假期怎么提升Python技能?100+编程题给你练~
  3. C语言--指针函数和函数指针
  4. linux_2.6内核内存缓冲与I/O调度机制:
  5. navicat 或者workbench 无法连接127.0.0.1(61)的解决方法
  6. linux多线程编程和linux 2.6下的nptl,Linux多線程編程和Linux 2.6下的NPTL
  7. 对于公司来说,企业内训是否真的有必要?
  8. 利用awstats分析nginx日志 简单配置
  9. python贴吧-Python爬虫——抓取贴吧帖子
  10. UVa 714 抄书(贪心+二分)
  11. cnpm下载依赖包速度快的原理探究
  12. 数码单反相机与无反光镜相机。选择产品摄影解决方案
  13. CentOS 安装字体
  14. Router的路由表
  15. 抢票助手-for 12306买火车票.订票助手.高铁.动车.春运.车票管家.自动刷票.列车时刻表
  16. Flutter实战之go_router路由组件入门指南
  17. codeforces-574B
  18. 【转】什么是公网安备
  19. ML302 OpenCPU系列(7)---AW8733A音频PA调试
  20. android 文件浏览器源码,android 文件管理器源码

热门文章

  1. 第三方阿里云盘小白羊版v2发布!提前尝鲜!!!!
  2. Elasticsearch监控插件Marvel的安装使用
  3. 两圆的外切线与内切线的切点算法
  4. 计算机系统(一)期末复(yu)习(3):LC-3汇编,输入与输出
  5. C# 利用AEC算法加密解密实现前台后台安全校验,附前端后台代码示例
  6. 2019年数学建模C题
  7. vue 仿写微信公众号自定义菜单
  8. 李元翼 梧里 徒死無益
  9. 准备考试?python也能帮你划重点,上考场
  10. 计算机系统的大脑是什么,埃隆·马斯克认为人类未来的大脑计算机系统