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实现批量转换文件编码(批转换编码示例)
Jan 23 Python
Python插件virtualenv搭建虚拟环境
Nov 20 Python
Python基于辗转相除法求解最大公约数的方法示例
Apr 04 Python
python之pyqt5通过按钮改变Label的背景颜色方法
Jun 13 Python
python遍历文件目录、批量处理同类文件
Aug 31 Python
python数据处理——对pandas进行数据变频或插值实例
Apr 22 Python
利用Python将多张图片合成视频的实现
Nov 23 Python
python 如何停止一个死循环的线程
Nov 24 Python
python3爬虫中多线程进行解锁操作实例
Nov 25 Python
Python中Permission denied的解决方案
Apr 02 Python
Python如何用re模块实现简易tokenizer
May 02 Python
基于Python编写一个监控CPU的应用系统
Jun 25 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三元运算符的结合性介绍
2012/01/10 PHP
php class中public,private,protected的区别以及实例分析
2013/06/18 PHP
php自定义session示例分享
2014/04/22 PHP
详解PHP安装mysql.so扩展的方法
2016/12/31 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
将HTML自动转为JS代码
2006/06/26 Javascript
基于Bootstrap+jQuery.validate实现Form表单验证
2014/12/16 Javascript
sea.js常用的api简易文档
2016/11/15 Javascript
js手机号4位显示空格,银行卡每4位显示空格效果
2017/03/23 Javascript
BootStrap给table表格的每一行添加一个按钮事件
2017/09/07 Javascript
vue实现消息的无缝滚动效果的示例代码
2017/12/05 Javascript
vue的过滤器filter实例详解
2018/09/17 Javascript
jQuery+vue.js实现的多选下拉列表功能示例
2019/01/15 jQuery
微信小程序下拉加载和上拉刷新两种实现方法详解
2019/09/05 Javascript
Vue的click事件防抖和节流处理详解
2019/11/13 Javascript
使用vue打包进行云服务器上传的问题
2020/03/02 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
2020/12/11 Vue.js
vue如何使用rem适配
2021/02/06 Vue.js
[46:10]2014 DOTA2国际邀请赛中国区预选赛 CnB VS HGT
2014/05/21 DOTA
Python中使用asyncio 封装文件读写
2016/09/11 Python
Python计算两个日期相差天数的方法示例
2017/05/23 Python
python实现百万答题自动百度搜索答案
2018/01/16 Python
Django实现登录随机验证码的示例代码
2018/06/20 Python
Python安装tar.gz格式文件方法详解
2020/01/19 Python
美国珠宝店:Helzberg Diamonds
2018/10/24 全球购物
法国在线药房:Shop Pharmacie
2019/11/26 全球购物
青年创业培训欢迎词
2014/01/10 职场文书
创先争优活动方案
2014/02/12 职场文书
婚假请假条怎么写
2014/04/10 职场文书
拾金不昧锦旗标语
2014/06/27 职场文书
劳动争议和解协议书范本
2014/11/20 职场文书
求职简历自我评价范文
2015/03/10 职场文书
给校长的建议书作文400字
2015/09/14 职场文书
html5移动端禁止长按图片保存的实现
2021/04/20 HTML / CSS
html输入两个数实现加减乘除功能
2021/07/01 HTML / CSS
Ajax异步刷新功能及简单案例
2021/11/20 Javascript