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 相关文章推荐
python使用心得之获得github代码库列表
Jun 25 Python
Python中的特殊语法:filter、map、reduce、lambda介绍
Apr 14 Python
详解Python3中字符串中的数字提取方法
Jan 14 Python
Python和C/C++交互的几种方法总结
May 11 Python
python使用TensorFlow进行图像处理的方法
Feb 28 Python
python-docx修改已存在的Word文档的表格的字体格式方法
May 08 Python
使用Python做定时任务及时了解互联网动态
May 15 Python
Python QQBot库的QQ聊天机器人
Jun 19 Python
pytorch 可视化feature map的示例代码
Aug 20 Python
python 函数嵌套及多函数共同运行知识点讲解
Mar 03 Python
python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】
Apr 26 Python
用python爬虫批量下载pdf的实现
Dec 01 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
两种php调用Java对象的方法
2006/10/09 PHP
需要使用php模板的朋友必看的很多个顶级PHP模板引擎比较分析
2008/05/26 PHP
深入理解PHP JSON数组与对象
2016/07/19 PHP
PHP基于关联数组20行代码搞定约瑟夫问题示例
2017/11/07 PHP
一端时间轮换的广告
2006/06/26 Javascript
jquery tools 系列 scrollable学习
2009/09/06 Javascript
一些javascript一些题目的解析
2010/12/25 Javascript
无阻塞加载脚本分析[全]
2011/01/20 Javascript
在网站上应该用的30个jQuery插件整理
2011/11/03 Javascript
JavaScript学习笔记之数组的增、删、改、查
2016/03/23 Javascript
AngularJS 表达式详细讲解及实例代码
2016/07/26 Javascript
JS中绑定事件顺序(事件冒泡与事件捕获区别)
2017/01/24 Javascript
微信小程序日历效果
2018/12/29 Javascript
JavaScript中break、continue和return的用法区别实例分析
2020/03/02 Javascript
[01:53]DOTA2超级联赛专访Zhou 五年职业青春成长
2013/05/29 DOTA
[38:42]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第二场 11.05
2020/11/05 DOTA
简单介绍Python中用于求最小值的min()方法
2015/05/15 Python
Python字符串特性及常用字符串方法的简单笔记
2016/01/04 Python
Linux 下 Python 实现按任意键退出的实现方法
2016/09/25 Python
Python解惑之True和False详解
2017/04/24 Python
pygame游戏之旅 python和pygame安装教程
2018/11/20 Python
Python数据类型之Dict字典实例详解
2019/05/07 Python
python实现统计代码行数的小工具
2019/09/19 Python
使用pyqt 实现重复打开多个相同界面
2019/12/13 Python
python中property和setter装饰器用法
2019/12/19 Python
利用python实现凯撒密码加解密功能
2020/03/31 Python
python MultipartEncoder传输zip文件实例
2020/04/07 Python
python中xlrd模块的使用详解
2021/02/01 Python
几道PHP的面试题
2012/05/19 面试题
一组SQL面试题
2016/02/15 面试题
提高EJB性能都有哪些技巧
2012/03/25 面试题
Java中的类包括什么内容?设计时要注意哪些方面
2012/05/23 面试题
歌唱比赛策划方案
2014/06/06 职场文书
工作失误检讨书
2015/01/26 职场文书
给校长的建议书范文
2015/09/14 职场文书
2016拓展训练心得体会范文
2016/01/12 职场文书