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的简单操作的更多相关文章

  1. Python中关于csv的简单操作

    Python中关于csv的简单操作 CSV操作简单,直接import csv即可, 主要使用reader和pandas 1 reader的简单使用 csv.reader("1.csv&quo ...

  2. pandas 写csv 操作

    pandas 写csv 操作 def show_history(self): df = pd.DataFrame() df['Time'] = pd.Series(self.time_hist) df ...

  3. Linux下MySQL的简单操作

    Linux下MySQL的简单操作 更改mysql数据库root的密码 首次进入数据库是不用密码的: [root@localhost ~]# /usr/local/mysql/bin/mysql -ur ...

  4. 小白学 Python 数据分析(6):Pandas (五)基础操作(2)数据选择

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  5. csv的读写操作

    cvs简介: CSV 全称 Comma-Separated Values,中文叫逗号分隔值或字符分隔值,它以纯文本形式存储表格数据(数字和文本),其本质就是一个字符序列,可以由任意数目的记录组成,记录 ...

  6. [Python]-pandas模块-CSV文件读写

    Pandas 即Python Data Analysis Library,是为了解决数据分析而创建的第三方工具,它不仅提供了丰富的数据模型,而且支持多种文件格式处理,包括CSV.HDF5.HTML 等 ...

  7. x01.MagicCube: 简单操作

    看最强大脑,发现魔方还是比较好玩的,便买了一个,对照七步还原法,居然也能成功还原. 为什么不写一个魔方程序呢?在网上找了找,略作修改,进行简单操作,还是不错的,其操作代码如下: protected o ...

  8. js简单操作Cookie

    贴一段js简单操作Cookie的代码: //获取指定名称的cookie的值 function getCookie(objName) { var arrStr = document.cookie.spl ...

  9. GitHub学习心得之 简单操作

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 前言 本文对Github的基本操作进行了总结, 主要基于以下文章: http://gitre ...

随机推荐

  1. shell 命令 修改文件权限 chmod

    1. 所有者+.-权限 更改那个拥有者的权限 u  表示文件的所有者 g  表示文件所在的组 o  表示其他用户 a  所有,以上三者 增加 / 减少权限 + 表示增加权限 - 表示取消权限 更改具体 ...

  2. yum 安装rpmbuild命令

    yum install -y rpm-build [root@zhu2 bin]# rpm -qf rpmbuildrpm-build-4.8.0-27.el6.x86_64

  3. Java 学习 时间格式化(SimpleDateFormat)与历法类(Calendar)用法详解

    基于Android一些时间创建的基本概念 获取当前时间 方式一: Date date = new Date(); Log.e(TAG, "当前时间="+date); 结果: E/T ...

  4. 阿里云应用上边缘云解决方案助力互联网All in Cloud

    九月末的杭州因为一场云栖大会变得格外火热. 9月25日,吸引全球目光的2019杭州云栖大会如期开幕.20000平米的展区集结数百家企业,为数万名开发者带来了一场前沿科技的饕餮盛宴. 如同往年一样,位于 ...

  5. python实现全局配置和用户配置文件

    一.文件目录格式 二.代码 1.conf.__init__.py import importlib import os from conf import gsettings class Setting ...

  6. go操作空指针导致supervisor进程服务挂机的坑

    一.起因 在数据库中直接手动插入了某条记录,但由于该记录的某个字段的空值,与另一个字段的状态码不符合,在go程序中,突然操作了该空字段的指针,导致程序panic挂机. panic: runtime e ...

  7. selector是在文件夹drawable中进行定义的xml文件转载 https://www.cnblogs.com/fx2008/p/3157040.html

    获取Drawable对象: Resources res = mContext.getResources(); Drawable myImage = res.getDrawable(R.drawable ...

  8. HDU-1852-Beijing 2008-一个神奇的公式求逆元

    As we all know, the next Olympic Games will be held in Beijing in 2008. So the year 2008 seems a lit ...

  9. Java基础拾遗(二) — 关于equals(),hashcode()和 ==

    这里分别讲==和equals()的关系,以及equals()和hashcode()的关系 讲解之前,需要先明白对象的内容.对象的引用,基本类型,引用类型这几个概念,此处不做解释 一.==和equals ...

  10. JavaScript对象小基础

    对象的简单学习: 1.String对象1:属性     在javascript中可以用单引号,或者双引号括起来的一个字符当作     一个字符对象的实例,所以可以在某个字符串后再加上.去调用Strin ...