在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_datetimepd.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

原文地址:https://www.cnblogs.com/zknublx/p/9702901.html

时间: 2024-11-13 01:40:35

在Pandas中更改列的数据类型【方法总结】的相关文章

在 Pandas 中更改列的数据类型

import pandas as pd import numpy as np a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']] df = pd.DataFrame(a) df.dtypes 0 object 1 object 2 object dtype: object 数据框(data.frame)是最常用的数据结构,用于存储二维表(即关系表)的数据,每一列存储的数据类型必须相同,不同数据列的数据类型可以相同,也可以

Oracle中对列加密的方法

Oracle中对列加密的方法 2011-12-22 17:21:13 分类: Linux Oracle支持多种列加密方式: 1,透明数据加密(TDE):create table encrypt_col(id int,txt varchar2(100) encrypt using '算法名称' identified by '密钥' no salt);优点:对应用完全透明缺点:需要数据库管理员管理wallet,增加了管理复杂性,也无法避免数据库管理员查看原文. 2,使用DBMS_CRYPTO包优点:

Asp.net 修改已有数据的DataTable中某列的数据类型

DataTable dt_PI = new DataTable(); //克隆表结构 dt_PI = ds.Tables[0].Clone(); dt_PI.Columns["FLTFullPercentage"].DataType = typeof(String);//修改[满柜百分比]列的数据类型 foreach (DataRow row in ds.Tables[0].Rows) { DataRow rowNew = dt_PI.NewRow(); foreach (DataCo

几何画板中更改背景颜色的方法有哪些

在使用几何画板的过程的,大家发现背景颜色默认为白色,但是有时为了让我们做的图形的效果更加美观或更方便对比,就需要更改背景颜色.但是一些用户对于这种操作还不是很了解,因此,我们特地制作了这篇相关教程,希望可以帮到大家.这就给大家分享一下几何画板中更改背景颜色的方法有哪些?  几何画板保存画板文件 在几何画板中更改背景颜色的步骤: 步骤一.点击编辑->参数选项,打开“参数选项对话框”.  几何画板参数选项 步骤二.点击颜色->背景颜色,选择合适的颜色.  几何画板颜色选择器 步骤三.选择颜色后,首

pandas中一列含有多种数据类型的转换:科学计算法转浮点数、字符映射

import pandas as pd import re def getNum(x): """ 科学计数法和字符转浮点数 """ if re.findall(r'\d+\.\d+E\+',x): return "%.f" % float(x) elif x=="C": return 1 else: return x df = pd.DataFrame({"x":[2030,1.1100

SQL中改变列的数据类型

一.该列非主键.无default约束 直接更新: alter table 表名 alter column 列名 数据类型 二.该列为主键列.无default约束 (1)删除主键 alter table 表名 drop constraint 主键名称 (2)更新数据类型 alter table 表名 alter column 列名 数据类型 not null (3)添加主键 alter table 表名 add constraint 主键名称 primary key (主键字段1,主键字段2) 三

Tomcat中更改网站根目录配置方法

有两种方法:1.tomcat目录下的conf文件夹, server.xml <Context path="" docBase="~/WebDeploy" debug="0" privileged="true" reloadable="true"> </Context> 2.增加Web部署文件在conf/Catalina/localhost下增加部署文件名随便,如ROOT.xml 文件

pandas中DataFrame逐行读取的方法

1 2 3 4 5 6 import pandas as pd dict=[[1,2,3,4,5,6],[2,3,4,5,6,7],[3,4,5,6,7,8],[4,5,6,7,8,9],[5,6,7,8,9,10]] data=pd.DataFrame(dict) print(data) for indexs in data.index: print(data.loc[indexs].values[0:-1]) 实验结果: 0 1 2 3 4 5 0 1 2 3 4 5 6 1 2 3 4 5

python中修改列表元素的方法

一.在for循环中直接更改列表中元素的值不会起作用: 如: l = list(range(10)[::2]) print (l) for n in l: n = 0 print (l) 运行结果: [0, 2, 4, 6, 8] [0, 2, 4, 6, 8] l中的元素并没有被修改 二.在for循环中更改list值的方法: 1.使用range l = list(range(10)[::2]) print (l) for i in range(len(l)): l[i] = 0 print (l