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中反射用法实例
Mar 27 Python
Python itertools模块详解
May 09 Python
用Python写一个无界面的2048小游戏
May 24 Python
用python写个自动SSH登录远程服务器的小工具(实例)
Jun 17 Python
使用Python的turtle模块画图的方法
Nov 15 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
Jan 30 Python
python五子棋游戏的设计与实现
Jun 18 Python
python实现五子棋人机对战游戏
Mar 25 Python
Django 开发环境与生产环境的区分详解
Jul 26 Python
python用线性回归预测股票价格的实现代码
Sep 04 Python
Python3使用tesserocr识别字母数字验证码的实现
Jan 29 Python
解决IDEA翻译插件Translation报错更新TTK失败不能使用
Apr 24 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实现截取指定长度
2013/08/06 PHP
ThinkPHP采用原生query实现关联查询left join实例
2014/12/02 PHP
php实现Session存储到Redis
2015/11/11 PHP
微信支付扫码支付php版
2016/07/22 PHP
详谈php中 strtr 和 str_replace 的效率问题
2017/05/14 PHP
php两点地理坐标距离的计算方法
2018/12/29 PHP
PHP使用ActiveMQ实现消息队列的方法详解
2019/05/31 PHP
js获取RadioButtonList的Value/Text及选中值等信息实现代码
2013/03/05 Javascript
JQuery 图片的展开和伸缩实例讲解
2013/04/18 Javascript
Javascript小技巧之生成html元素
2014/05/15 Javascript
手机号码,密码正则验证
2014/09/04 Javascript
浅谈javascript 迭代方法
2015/01/21 Javascript
javascript实现Table排序的方法
2015/05/15 Javascript
JS获取IMG图片高宽的简单实例
2016/05/17 Javascript
JavaScript之cookie技术详解
2016/11/18 Javascript
讲解vue-router之什么是动态路由
2018/05/28 Javascript
JavaScript设计模式之代理模式简单实例教程
2018/07/03 Javascript
layui实现数据分页功能(ajax异步)
2019/07/27 Javascript
JS立即执行的匿名函数用法分析
2019/11/04 Javascript
javascript 高级语法之继承的基本使用方法示例
2019/11/11 Javascript
jQuery+PHP+Ajax实现动态数字统计展示功能
2019/12/25 jQuery
vue-cli打包后本地运行dist文件中的index.html操作
2020/08/12 Javascript
浅谈numpy中linspace的用法 (等差数列创建函数)
2017/06/07 Python
django使用xadmin的全局配置详解
2019/11/15 Python
Python操作多维数组输出和矩阵运算示例
2019/11/28 Python
Python生成词云的实现代码
2020/01/14 Python
不可轻视HTML5!App三年内将被html5顶替彻底消失
2015/11/18 HTML / CSS
S’well Bottle保温杯官网:绝缘不锈钢水瓶
2018/05/09 全球购物
热爱祖国演讲稿
2014/05/04 职场文书
文明美德伴我成长演讲稿
2014/05/12 职场文书
人力资源管理毕业生自荐信
2014/06/26 职场文书
2014党的群众路线教育实践活动总结材料
2014/10/31 职场文书
六年级语文下册教学计划
2015/01/22 职场文书
考研英语辞职信
2015/05/13 职场文书
2015年计算机教师工作总结
2015/07/22 职场文书
《水上飞机》教学反思
2016/02/20 职场文书