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获取单个程序CPU使用情况趋势图
Mar 10 Python
Python实现简单截取中文字符串的方法
Jun 15 Python
Python聚类算法之DBSACN实例分析
Nov 20 Python
python使用xlrd与xlwt对excel的读写和格式设定
Jan 21 Python
[原创]教女朋友学Python(一)运行环境搭建
Nov 29 Python
使用python为mysql实现restful接口
Jan 05 Python
使用Python通过win32 COM实现Word文档的写入与保存方法
May 08 Python
python 用opencv调用训练好的模型进行识别的方法
Dec 07 Python
python贪吃蛇游戏代码
Apr 18 Python
K最近邻算法(KNN)---sklearn+python实现方式
Feb 24 Python
Python的控制结构之For、While、If循环问题
Jun 30 Python
Django contrib auth authenticate函数源码解析
Nov 12 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
Zend Framework页面缓存实例
2014/06/25 PHP
php访问数组最后一个元素的函数end()用法
2015/03/18 PHP
PHP实现cookie跨域session共享的方法分析
2019/08/23 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
2020/02/27 PHP
javascript控制swfObject应用介绍
2012/11/29 Javascript
jQuery 插件仿百度搜索框智能提示(带Value值)
2013/01/22 Javascript
js使用eval解析json实例与注意事项分享
2014/01/18 Javascript
JavaScript实现可拖拽的拖动层Div实例
2015/08/05 Javascript
jQuery幻灯片特效代码分享--鼠标滑过按钮时切换(2)
2020/11/18 Javascript
avalon js实现仿google plus图片多张拖动排序附源码下载
2015/09/24 Javascript
Hallo.js基于jQuery UI所见即所得的Web编辑器
2016/01/26 Javascript
jQuery使用模式窗口实现在主页面和子页面中互相传值的方法
2016/03/01 Javascript
浅谈ECMAScript6新特性之let、const
2017/08/02 Javascript
浅谈React Native Flexbox布局(小结)
2018/01/08 Javascript
Vue中this.$router.push参数获取方法
2018/02/27 Javascript
nodejs简单访问及操作mysql数据库的方法示例
2018/03/15 NodeJs
深入浅析Node环境和浏览器的区别
2018/08/14 Javascript
vue+canvas实现炫酷时钟效果的倒计时插件(已发布到npm的vue2插件,开箱即用)
2018/11/05 Javascript
详解用js代码触发dom事件的实现方案
2020/06/10 Javascript
[59:30]VG vs LGD 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.22
2019/09/05 DOTA
python实现飞机大战
2018/09/11 Python
python小程序实现刷票功能详解
2019/07/17 Python
python读取hdfs并返回dataframe教程
2020/06/05 Python
python实现三种随机请求头方式
2021/01/05 Python
python中xlrd模块的使用详解
2021/02/01 Python
简单介绍CSS3中Media Query的使用
2015/07/07 HTML / CSS
HTML5如何实现元素拖拽
2016/03/11 HTML / CSS
加拿大最大的五金、家居装修和园艺产品商店:RONA
2017/01/27 全球购物
导游实习生自荐书
2014/01/28 职场文书
采购经理岗位职责
2014/02/16 职场文书
大学生2014全国两会学习心得体会
2014/03/10 职场文书
《理想的风筝》教学反思
2014/04/11 职场文书
社会体育专业大学生职业生涯规划书
2014/09/17 职场文书
2014年保洁员工作总结
2014/11/19 职场文书
2015年圣诞节寄语
2015/08/17 职场文书
英国数字版游戏销量周榜公布 《小缇娜的奇幻之地》登顶
2022/04/03 其他游戏