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脚本实现下载合并SAE日志
Feb 10 Python
深入理解Python中各种方法的运作原理
Jun 15 Python
Python设置Socket代理及实现远程摄像头控制的例子
Nov 13 Python
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
Nov 01 Python
Python爬取十篇新闻统计TF-IDF
Jan 03 Python
pandas数据预处理之dataframe的groupby操作方法
Apr 13 Python
python日期时间转为字符串或者格式化输出的实例
May 29 Python
Python OpenCV处理图像之图像直方图和反向投影
Jul 10 Python
Django之模板层的实现代码
Sep 09 Python
Pytorch之Variable的用法
Dec 31 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
Mar 30 Python
将pymysql获取到的数据类型是tuple转化为pandas方式
May 15 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实现CSV文件的导入和导出类
2015/03/24 PHP
php使用cookie实现记住用户名和密码实现代码
2015/04/27 PHP
PhpStorm连接服务器并实现自动上传功能
2020/12/09 PHP
JS 容错处理代码, 屏蔽错误信息
2021/03/09 Javascript
Extjs学习笔记之二 初识Extjs之Form
2010/01/07 Javascript
23个Javascript弹出窗口特效整理
2011/02/25 Javascript
使用Browserify配合jQuery进行编程的超级指南
2015/07/28 Javascript
JavaScript实现将数组数据添加到Select下拉框的方法
2015/08/21 Javascript
基于Jquery代码实现手风琴菜单
2015/11/19 Javascript
Boostrap基础教程之JavaScript插件篇
2016/09/08 Javascript
React中嵌套组件与被嵌套组件的通信过程
2018/07/11 Javascript
微信小程序时间标签和时间范围的联动效果
2019/02/15 Javascript
layer 关闭指定弹出层的例子
2019/09/25 Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
2020/10/29 Javascript
[01:01:04]2018DOTA2亚洲邀请赛 4.5 淘汰赛 OpTic vs TNC 第一场
2018/04/06 DOTA
巧用Python装饰器 免去调用父类构造函数的麻烦
2012/05/18 Python
Python常用随机数与随机字符串方法实例
2015/04/09 Python
在Python中使用dict和set方法的教程
2015/04/27 Python
Python中的descriptor描述器简明使用指南
2016/06/02 Python
人生苦短我用python python如何快速入门?
2018/03/12 Python
对python 命令的-u参数详解
2018/12/03 Python
python使用minimax算法实现五子棋
2019/07/29 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
2019/08/28 Python
VSCode配合pipenv搞定虚拟环境的实现方法
2020/05/17 Python
基于canvas使用贝塞尔曲线平滑拟合折线段的方法
2018/01/10 HTML / CSS
Shopbop中文官网:美国亚马逊旗下时尚购物网站
2020/12/15 全球购物
应届毕业生如何写求职信
2014/02/16 职场文书
清明节网上祭英烈活动总结
2014/04/30 职场文书
党支部创先争优活动总结
2014/08/28 职场文书
授权委托书样本
2014/09/25 职场文书
井冈山红色之旅心得体会
2014/10/07 职场文书
幼儿园园长新年寄语
2015/08/17 职场文书
创业计划书之溜冰场
2019/10/25 职场文书
《最后一头战象》读后感:动物也有感情
2020/01/02 职场文书
Python+Appium实现自动抢微信红包
2021/05/21 Python
MongoDB连接数据库并创建数据等使用方法
2021/11/27 MongoDB