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装饰器使用方法实例
Nov 21 Python
Windows系统配置python脚本开机启动的3种方法分享
Mar 10 Python
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
Sep 18 Python
Python学习小技巧之列表项的推导式与过滤操作
May 20 Python
Python 中 Virtualenv 和 pip 的简单用法详解
Aug 18 Python
python实现批量视频分帧、保存视频帧
May 31 Python
浅析Python3中的对象垃圾收集机制
Jun 06 Python
python解析xml简单示例
Jun 21 Python
python递归下载文件夹下所有文件
Aug 31 Python
在OpenCV里实现条码区域识别的方法示例
Dec 04 Python
python更新数据库中某个字段的数据(方法详解)
Nov 18 Python
用 Django 开发一个 Python Web API的方法步骤
Dec 03 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
第五节 克隆 [5]
2006/10/09 PHP
完美实现GIF动画缩略图的php代码
2011/01/02 PHP
PHP的文件操作与算法实现的面试题示例
2015/08/10 PHP
php开发时容易忘记的一些技术细节
2016/02/03 PHP
YII Framework框架教程之国际化实现方法
2016/03/14 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
2016/03/21 PHP
Yii列表定义与使用分页方法小结(3种方法)
2016/07/15 PHP
windows7配置Nginx+php+mysql的详细教程
2016/09/04 PHP
PHP中常见的密码处理方式和建议总结
2018/10/14 PHP
简单实用的PHP文本缓存类实例
2019/03/22 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
2019/11/09 PHP
各种效果的jquery ui(接口)介绍
2008/09/17 Javascript
jquery中ajax学习笔记一
2011/10/16 Javascript
jQuery的显示和隐藏方法与css隐藏的样式对比
2013/10/18 Javascript
浅谈javascript 函数属性和方法
2015/01/21 Javascript
js弹出对话框方式小结
2015/11/17 Javascript
js跨浏览器的事件侦听器和事件对象的使用方法
2015/12/17 Javascript
浅析Bootstrap验证控件的使用
2016/06/23 Javascript
Vue2.0用户权限控制解决方案的示例
2018/02/10 Javascript
使用proxy实现一个更优雅的vue【推荐】
2018/06/19 Javascript
深入探讨JavaScript的最基本部分之执行上下文
2019/02/12 Javascript
Vue 开发必须知道的36个技巧(小结)
2019/10/09 Javascript
Node.js API详解之 timer模块用法实例分析
2020/05/07 Javascript
python获取本地计算机名字的方法
2015/04/29 Python
Python入门之三角函数sin()函数实例详解
2017/11/08 Python
Python爬虫框架scrapy实现的文件下载功能示例
2018/08/04 Python
详解如何用django实现redirect的几种方法总结
2018/11/22 Python
Python设计模式之适配器模式原理与用法详解
2019/01/15 Python
Python for循环通过序列索引迭代过程解析
2020/02/07 Python
python实现吃苹果小游戏
2020/03/21 Python
CSS3 实现footer 固定在底部(无论页面多高始终在底部)
2019/10/15 HTML / CSS
意大利奢侈品购物网站:Giglio
2018/01/05 全球购物
房地产销售计划书
2014/01/10 职场文书
乱丢垃圾袋检讨书
2014/10/08 职场文书
流动人口婚育证明
2014/10/19 职场文书
工作时间证明
2015/06/15 职场文书