pandas读取CSV文件时查看修改各列的数据类型格式


Posted in Python onJuly 07, 2019

下面给大家介绍下pandas读取CSV文件时查看修改各列的数据类型格式,具体内容如下所述:

我们在调bug的时候会经常查看、修改pandas列数据的数据类型,今天就总结一下:

1.查看:

   Numpy和Pandas的查看方式略有不同,一个是dtype,一个是dtypes

print(Array.dtype)
#输出int64
print(df.dtypes)
#输出Df下所有列的数据格式 a:int64,b:int64

2.修改

import pandas as pd
import numpy as np
df = pd.read_csv('000917.csv',encoding='gbk')
df = df[df['涨跌幅']!='None']
df['涨跌幅'] = df['涨跌幅'].astype(np.float64)

print(df[df['涨跌幅']>5])

ps:在Pandas中更改列的数据类型

先看一个非常简单的例子:

a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']]
df = pd.DataFrame(a)

有什么方法可以将列转换为适当的类型?例如,上面的例子,如何将列2和3转为浮点数?有没有办法将数据转换为DataFrame格式时指定类型?或者是创建DataFrame,然后通过某种方法更改每列的类型?理想情况下,希望以动态的方式做到这一点,因为可以有数百个列,明确指定哪些列是哪种类型太麻烦。可以假定每列都包含相同类型的值。

解决方法

可以用的方法简单列举如下:

对于创建DataFrame的情形

如果要创建一个DataFrame,可以直接通过dtype参数指定类型:

df = pd.DataFrame(a, dtype='float') #示例1
df = pd.DataFrame(data=d, dtype=np.int8) #示例2
df = pd.read_csv("somefile.csv", dtype = {'column_name' : str})

对于单列或者Series

下面是一个字符串Seriess的例子,它的dtype为object:

>>> s = pd.Series(['1', '2', '4.7', 'pandas', '10'])
>>> s
0     1
1     2
2    4.7
3  pandas
4    10
dtype: object

使用to_numeric转为数值。默认情况下,它不能处理字母型的字符串'pandas':

>>> pd.to_numeric(s) # or pd.to_numeric(s, errors='raise')
ValueError: Unable to parse string

可以将无效值强制转换为NaN,如下所示:

>>> pd.to_numeric(s, errors='coerce')
0   1.0
1   2.0
2   4.7
3   NaN
4  10.0
dtype: float64

如果遇到无效值,第三个选项就是忽略该操作:

>>> pd.to_numeric(s, errors='ignore')
# the original Series is returned untouched

对于多列或者整个DataFrame
如果想要将这个操作应用到多个列,依次处理每一列是非常繁琐的,所以可以使用DataFrame.apply处理每一列。

对于某个DataFrame:

>>> a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']]
>>> df = pd.DataFrame(a, columns=['col1','col2','col3'])
>>> df
 col1 col2 col3
0  a 1.2  4.2
1  b  70 0.03
2  x  5   0

然后可以写:

df[['col2','col3']] = df[['col2','col3']].apply(pd.to_numeric)

那么'col2'和'col3'根据需要具有float64类型。

但是,可能不知道哪些列可以可靠地转换为数字类型。在这种情况下,设置参数:

df.apply(pd.to_numeric, errors='ignore')

然后该函数将被应用于整个DataFrame,可以转换为数字类型的列将被转换,而不能(例如,它们包含非数字字符串或日期)的列将被单独保留。

另外pd.to_datetime和pd.to_timedelta可将数据转换为日期和时间戳。

软转换——类型自动推断

版本0.21.0引入了infer_objects()方法,用于将具有对象数据类型的DataFrame的列转换为更具体的类型。

例如,用两列对象类型创建一个DataFrame,其中一个保存整数,另一个保存整数的字符串:

>>> df = pd.DataFrame({'a': [7, 1, 5], 'b': ['3','2','1']}, dtype='object')
>>> df.dtypes
a  object
b  object
dtype: object

然后使用infer_objects(),可以将列'a'的类型更改为int64:

>>> df = df.infer_objects()
>>> df.dtypes
a   int64
b  object
dtype: object

由于'b'的值是字符串,而不是整数,因此'b'一直保留。

astype强制转换

如果试图强制将两列转换为整数类型,可以使用df.astype(int)。

示例如下:

a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']]
df = pd.DataFrame(a, columns=['one', 'two', 'three'])
df
Out[16]: 
 one two three
0  a 1.2  4.2
1  b  70 0.03
2  x  5   0
df.dtypes
Out[17]: 
one   object
two   object
three  object
df[['two', 'three']] = df[['two', 'three']].astype(float)
df.dtypes
Out[19]: 
one    object
two   float64
three  float64

总结

以上所述是小编给大家介绍的pandas读取CSV文件时查看修改各列的数据类型格式,希望对大家有所帮助,如果有任何疑问欢迎给我留言,小编会及时回复大家的!

Python 相关文章推荐
总结网络IO模型与select模型的Python实例讲解
Jun 27 Python
Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
Mar 20 Python
Python基于回溯法子集树模板解决0-1背包问题实例
Sep 02 Python
python3.6+django2.0开发一套学员管理系统
Mar 03 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
Apr 01 Python
Django 外键的使用方法详解
Jul 19 Python
简单了解python中的与或非运算
Sep 18 Python
python通过SSH登陆linux并操作的实现
Oct 10 Python
详解如何用python实现一个简单下载器的服务端和客户端
Oct 28 Python
调用其他python脚本文件里面的类和方法过程解析
Nov 15 Python
python 正则表达式参数替换实例详解
Jan 17 Python
python基础入门之字典和集合
Jun 13 Python
Python实现FTP文件传输的实例
Jul 07 #Python
Python爬虫动态ip代理防止被封的方法
Jul 07 #Python
Python异常处理例题整理
Jul 07 #Python
解决pycharm下os.system执行命令返回有中文乱码的问题
Jul 07 #Python
在python中实现调用可执行文件.exe的3种方法
Jul 07 #Python
Python求两点之间的直线距离(2种实现方法)
Jul 07 #Python
对Python中画图时候的线类型详解
Jul 07 #Python
You might like
提问的智慧
2006/10/09 PHP
php数据库连接时容易出错的特殊符号问题
2010/09/01 PHP
PHP include任意文件或URL介绍
2014/04/29 PHP
destoon后台网站设置变成空白的解决方法
2014/06/21 PHP
PHP中使用正则表达式提取中文实现笔记
2015/01/20 PHP
WordPress中"无法将上传的文件移动至"错误的解决方法
2015/07/01 PHP
php arsort 数组降序排序详细介绍
2016/11/17 PHP
用jscript启动sqlserver
2007/06/21 Javascript
ModelDialog JavaScript模态对话框类代码
2011/04/17 Javascript
JavaScript 判断日期格式是否正确的实现代码
2011/07/04 Javascript
firefox下jquery iframe刷新页面提示会导致重复之前动作
2012/12/17 Javascript
jQuery操作checkbox选择(list/table)
2013/04/07 Javascript
JavaScript实现班级随机点名小应用需求的具体分析
2014/05/12 Javascript
JavaScript基础函数整理汇总
2015/01/30 Javascript
理解javascript函数式编程中的闭包(closure)
2016/03/08 Javascript
AngularJS基础 ng-csp 指令详解
2016/08/01 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
2016/08/23 Javascript
JavaScript对象创建模式实例汇总
2016/10/03 Javascript
JS实现unicode和UTF-8之间的互相转换互转
2017/07/05 Javascript
日期时间范围选择插件:daterangepicker使用总结(必看篇)
2017/09/14 Javascript
WebPack配置vue多页面的技巧
2018/05/15 Javascript
[30:55]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第二场 11.18
2020/11/18 DOTA
Python正则表达式的使用范例详解
2014/08/08 Python
列举Python中吸引人的一些特性
2015/04/09 Python
Python六大开源框架对比
2015/10/19 Python
使用Python AIML搭建聊天机器人的方法示例
2018/07/09 Python
python 3.3 下载固定链接文件并保存的方法
2018/12/18 Python
Python 3.3实现计算两个日期间隔秒数/天数的方法示例
2019/01/07 Python
使用OpenCV去除面积较小的连通域
2020/07/05 Python
python3 kubernetes api的使用示例
2021/01/12 Python
巴西最大的巴士票务门户:Quero Passagem
2020/11/21 全球购物
ASP.NET中的身份验证有那些
2012/07/13 面试题
授权委托书
2014/09/17 职场文书
学生实习证明模板汇总
2014/09/25 职场文书
帝企鹅日记观后感
2015/06/10 职场文书
读《解忧杂货店》有感:请相信一切都是最好的安排
2019/11/07 职场文书