当前位置: 首页 > news >正文

pythoncsv数据类型_pandas读取CSV文件时查看修改各列的数据类型格式

下面给大家介绍下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文件时查看修改各列的数据类型格式,希望对大家有所帮助,如果有任何疑问欢迎给我留言,小编会及时回复大家的!

本文标题: pandas读取CSV文件时查看修改各列的数据类型格式

本文地址: http://www.cppcns.com/jiaoben/python/264919.html

相关文章:

  • python标准库os的方法_Python标准库os.path包、glob包使用实例
  • python数字排序_python中如何对数字排序
  • 有趣的python项目_Python几个有趣和特别的小故事
  • python缩进格式错误修改_17个新手常见Python运行时错误
  • python什么是关键字参数_python的位置参数、默认参数、关键字参数、可变参数区别...
  • python数学计算函数_python之数学函数篇
  • linux双系统_windows下的Linux子系统,双系统的日子结束了
  • dos命令执行bat文件_dos命令tree图文教程,树形图形显示路径目录文件和文件夹...
  • python可以爬什么_Java可以像Python一样方便爬去世间万物
  • python二分法结果图_求助,python的二分法查找,按照视频上的代码写下来,结果运行错误...
  • vnpy怎么创建策略并回测_一步一步学vnpy
  • win7 安装c++2008失败0x80070002_3Dmax安装常见的六大问题
  • python百分号转义_Python 正则表达式(转义问题)
  • eclipse设置utf8编码_一篇文章搞懂Python 使用reload(sys)设置编码方式
  • robotframework安装_Robotframework自动化常见问题总结
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 11111111
  • CAP理论的例子讲解
  • CSS相对定位
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • k8s如何管理Pod
  • node入门
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • Vue学习第二天
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 排序算法之--选择排序
  • 使用putty远程连接linux
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 学习笔记:对象,原型和继承(1)
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • 我们雇佣了一只大猴子...
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • #stm32驱动外设模块总结w5500模块
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (poj1.2.1)1970(筛选法模拟)
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (六)c52学习之旅-独立按键
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (新)网络工程师考点串讲与真题详解
  • .net refrector
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .project文件
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘
  • @RequestParam详解
  • @Resource和@Autowired的区别