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. Number浮点数运算详解

    文章来自我的 github 博客,包括技术输出和学习笔记,欢迎star. 一道题 0.1 + 0.2 = ? 在浏览器中测试下计算结果,得到的结果是 0.30000000000000004,并不是理想 ...

  2. 2018-12-1-WPF-修改-ItemContainerStyle-鼠标移动到未选中项效果和选中项背景

    title author date CreateTime categories WPF 修改 ItemContainerStyle 鼠标移动到未选中项效果和选中项背景 lindexi 2018-12- ...

  3. Mysql优化-索引

    1. 索引的本质 MySQL官方对索引的定义为:索引是帮助MySQL高效获取数据的数据结构. 数据库查询是数据库的最主要功能之一.我们都希望查询数据的速度尽可能的快,因此 数据库系统的设计者会从查询算 ...

  4. Haar分类器方法

    一.Haar分类器的前世今生 二.人脸检测属于计算机视觉的范畴,早期人们的主要研究方向是人脸识别,即根据人脸来识别人物的身份,后来在复杂背景下的人脸检测需求越来越大,人脸检测也逐渐作为一个单独的研究方 ...

  5. el-dialog(点击左上角的关闭x)执行弹窗关闭之前的回调

    绑定的事件: :before-close="handleDialogClose" html: <!-- 新增.编辑弹窗 --> <el-dialog :close ...

  6. 同步图计算实现pageRank算法

    pageRank算法是Google对网页重要性的打分算法. 一个用户浏览一个网页时,有85%的可能性点击网页中的超链接,有15%的可能性转向任意的网页.pageRank算法就是模拟这种行为. Rv:定 ...

  7. MySQL Download

    { http://www.wampserver.com/#wampserver-64-bits-php-5-6-25-php-7 }

  8. csp-s模拟100,101T1,T2题解

    题面:https://www.cnblogs.com/Juve/articles/11799325.html 我太蒻了只会T1T2 组合: 欧拉路板子?不会呀... 然后打了个优化,防止暴栈 #inc ...

  9. Unknown/unsupported SVM type in function 'cv::ml::SVMImpl::checkParams'

    1.在使用PYTHON[Python 3.6.8]训练样本时报错如下: Traceback (most recent call last): File "I:\Eclipse\Python\ ...

  10. poj2954Triangle

    传送门 Pick定理 定点坐标为整点的三角形,面积为S,边上的整点个数为L,三角形内部整点个数为N S=N+L/2-1 //Achen #include<algorithm> #inclu ...