Pandas对于CSV的简单操作
Pandas对于CSV的简单操作
最近在研究pandas对于csv文件的读取以及一些操作,网上的信息比较乱,写篇博客记录一下,毕竟自己写的才是最适合自己的用法.
首先我们应该都知道,pandas是一个用于数据分析,以及可以简单的绘图的一个python模块,本文并不是从零开始介绍这个模块,而是从我最近几天的使用来说的,从我用到的,最实用的那一部分说起.
首先,导入模块,这是必须的
import pandas as pd # 不要问我为什么要简称pd,大家都是这么做的,惯例,日常习惯好伐
import numpy as np
导入模块之后,我们就需要导入CSV文件,对,就是这么直奔主题,我这里不会讲什么series,也不会讲什么numpy数组,那些理论都不实用,我们就是要直接用,碰到问题再去解决.
读取csv文件的方法叫做
read_csv() 读取csv文件
df = pd.read_csv(filename,usecols=[要取的列名])
'''
read_csv的参数很多,有需求可以去查,因为我这里只是用到了要取到的列名,所以只写这一个,当然你可以写encoding="utf-8"来防止读取时候中文有乱码,或者等等之类的.
filename可以是当前文件夹里的文件名,或者是从根目录开始的一个路径,比如下例
usecols = [] 这里写要取的列名,如果不想取csv文件的全部列的话,就在这里设定,如果要取全文件可以不写.
'''
df = pd.read_csv('111.csv',usecols=['teacher','student'])
# 或者
df = pd.read_csv(r'D:\PythonStudying\111.csv',usecols=['teacher','student'])
# 两种读取方法都可以
# 对于一些数据量比较大的表格,我们可以选择用分块读取的方式来加快读取的速度以及减小系统的内存占用,这种读取方法借鉴于
https://blog.csdn.net/jambone/article/details/78769421
reader = pd.read_csv(filename, encoding="utf_8_sig", sep=',', iterator=True, usecols=line)
i = 0
while True:
try:
start2 = time.clock()
df = reader.get_chunk(1000000)
i = i + 1
end2 = time.clock()
# 每次循环结束时间
print('{} 秒: completed {} rows'.format(end2 - start2, i * 1000000))
except StopIteration:
print("Iteration is stopped.")
# 循环结束退出
break
然后,我们成功读取到之后,可以尝试用print(df)来查看取到的csv列表
合并一个表中的不同列(单纯的合并,不做计算)
我们可以把读取到的csv表中的不同列合并成一列,其实也不算是合并,只能说是新的生成.
df["User"] = df["ClientID"].map(str)+df["UserID"].map(str)+df["phone"].map(str)
# 我们知道,只有字符串或者数值之间才能直接相加,所以我们要清楚的知道自己合并的这几列是什么格式的数据,如果当做字符串合并,那么就在每列结尾用map(str),如果要用数值相加,那么要用map(float)或者map(int)
# 这样合并原来的列并不会消失,只是会形成一个新列,默认在整个表的尾部,也就是最后一列,如果需要把原列删除再调用drop即可
apply() 一个表中的不同列,行之间做计算
tablename['time'] = df.apply(
lambda x: x['second']+x['minute']*60),
axis=1)
# 上面语句的意思就是,把名为second的列的值加上名为minute的列的值乘以60,作为一个叫做time的新列
# lambda 是匿名函数的意思,即传入一个x参数,返回的是冒号后面的式子的结果
# axis的参数和上文相同,0代表对行操作,1代表对列操作
# 要注意一点,apply是一个非常耗时的操作,数据量较大的话要慎用这个函数,我曾经测试过,60W行的csv表,对列做操作,用apply耗时20s,直接用列操作只用时5s,所以要注意
# 直接用列之间操作如下:
tablename['time'] = tablename['second']+tablename['minute']*60
drop() 删除表中列,行
# 删除某一列或者某一行,用drop
df.drop(columns=line_name,axis)
# 第一个参数columns即为你要删除的列或者行的名字,可以是一个值,也可以是一个队列多个值
# 第二个参数axis则是你要删除的是列还是行:
# axis=0,就是删除名为line_name的行
# axis=1,就是删除名为line_name的列
merge() 合并两个表
pd.merge(table1, table2, on=line_name,how = )
# merge是合并函数,前面两个参数即为要合并的两个表的名称
# 第三个参数on,是按照某一列或者某些列来合并表,比如on=['student','teacher'],就是同时按照这两列来合并表,作为key
# 第四个参数how,就是合并的方式,可填参数为inner内联,left左连接,right右连接,outer全连接,这里解释一下这几种合并方式的区别
1. inner 内联,即两个表以key为关键字合并之后,如果某个其余列有空的数值,那么这一列将不会保留,即内联方式只会保留两个表相对于key都有数据的行,或者列,有空数据都不会保留
2. left 左连接,即左边的所有数据都会保留,也就是table1的数据,右表如果有空数据,会自动填入null
3. right 右连接,原理同左连接,换个方向而已
4. 全连接,即两边表的所有数据都会保留,如果有空数据都会自动填入null
# 实例:
pd.merge(df1, df2, on=["student","teacher"],how = "outer")
to_csv() 创建新表
# 当我们读入一些csv表,然后对他们操作完毕之后,我们就需要把处理之后的数据输出,重新生成一个表,就要用到这个函数
df.to_csv(filename, encoding="utf_8_sig")
# 第一个参数就是你要生成的文件名,只写一个文件名的话会默认生成到你的py文件所在的目录,当然可以写一个从根目录开始的路径,注意要加引号
# 第二个参数一定要加,这个参数可以避免重新生成的csv表里面的中文出现乱码
这都是对csv表的基本操作,还在学习当中,持续更新ing........
Pandas对于CSV的简单操作的更多相关文章
- Python中关于csv的简单操作
Python中关于csv的简单操作 CSV操作简单,直接import csv即可, 主要使用reader和pandas 1 reader的简单使用 csv.reader("1.csv&quo ...
- pandas 写csv 操作
pandas 写csv 操作 def show_history(self): df = pd.DataFrame() df['Time'] = pd.Series(self.time_hist) df ...
- Linux下MySQL的简单操作
Linux下MySQL的简单操作 更改mysql数据库root的密码 首次进入数据库是不用密码的: [root@localhost ~]# /usr/local/mysql/bin/mysql -ur ...
- 小白学 Python 数据分析(6):Pandas (五)基础操作(2)数据选择
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- csv的读写操作
cvs简介: CSV 全称 Comma-Separated Values,中文叫逗号分隔值或字符分隔值,它以纯文本形式存储表格数据(数字和文本),其本质就是一个字符序列,可以由任意数目的记录组成,记录 ...
- [Python]-pandas模块-CSV文件读写
Pandas 即Python Data Analysis Library,是为了解决数据分析而创建的第三方工具,它不仅提供了丰富的数据模型,而且支持多种文件格式处理,包括CSV.HDF5.HTML 等 ...
- x01.MagicCube: 简单操作
看最强大脑,发现魔方还是比较好玩的,便买了一个,对照七步还原法,居然也能成功还原. 为什么不写一个魔方程序呢?在网上找了找,略作修改,进行简单操作,还是不错的,其操作代码如下: protected o ...
- js简单操作Cookie
贴一段js简单操作Cookie的代码: //获取指定名称的cookie的值 function getCookie(objName) { var arrStr = document.cookie.spl ...
- GitHub学习心得之 简单操作
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 前言 本文对Github的基本操作进行了总结, 主要基于以下文章: http://gitre ...
随机推荐
- 《软件调试修炼之道》Part 1(CH1~5)读书笔记 PB16110698 第八周(~4.26)
编程中,调试几乎是必不可少的,一劳永逸.一次完成预想功能而完全不出bug的情况凤毛麟角,出现bug→调试→再出现bug→再调试……基本是软件工程中的常态.可以说,软件调试是每个coder的必修课,而& ...
- YARN设计思路
- GetOpenFilename的基本用法
GetOpenFilename '一.概述基本语法 Application.GetOpenFilename 方法 显示标准的“打开”对话框,并获取用户文件名,而不必真正打开任何文件,只是把打开文件名称 ...
- 【学术篇】SDOI2008 沙拉公主的困惑
传送门! 题目在这里... 题目大意? 难道不是说的很清楚了么OvO 求n!中与m!互质的数的个数.. 题目分析. 显然的数论... 所以就是化式子呗.. 一个很显然的性质就是如果\(gcd(a,b) ...
- windows 嵌入控制台
{ 实际非常简单 需要控制台的hwnd 和 hdc 能获取控制台的hwnd 那hdc 就出来了 有了hdc 还有什么不能干的呢?? 如果会win32 窗口编程的就知道hdc,是一个让人流口水的类型 } ...
- Orika JavaBean映射工具探秘
Orika是一个简单.快速的JavaBean拷贝框架,Orika使用字节代码生成来创建具有最小开销的快速映射器. 关于: 作为开发人员,我们必须为业务问题提供解决方案,我们希望利用我们的时间来做真正重 ...
- 数据库实例性能调优利器:Performance Insights
Performance Insights是什么 阿里云RDS Performance Insights是RDS CloudDBA产品一项专注于用户数据库实例性能调优.负载监控和关联分析的利器,以简单直 ...
- thinkphp扩展配置
扩展配置可以支持自动加载额外的自定义配置文件,并且配置格式和项目配置一样. 设置扩展配置的方式如下(多个文件用逗号分隔): // 加载扩展配置文件 'LOAD_EXT_CONFIG' => 'u ...
- kubernetes监控和性能分析工具:heapster+influxdb+grafana
1.部署heapster 下载 heapster 相关 yaml 文件 [root@master dashboard]# wget https://raw.githubusercontent.com/ ...
- SpringCloud学习笔记(九):SpringCloud Config 分布式配置中心
概述 分布式系统面临的-配置问题 微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务.由于每个服务都需要必要的配置信息才能运行,所以一套集中式的.动 ...