这是系列文章,我会按照stackoverflow上pandas相关问题投票数排序进行整理学习。不学习是会变咸鱼的~
原问题:change data type of columns in pandas,如何将列的数据转为合适的类型,如将下例中数字从string类型转为float。
1 | import pandas as pd |
1)pd.to_numeric
方法
1 | # 不改变原本的数据 |
pd.to_numeric()
方法不能对DataFrame格式的数据直接转换,所以如果有多个column需要转换,可以使用apply方法。
1 | # apply返回处理之后的结果,并不改变原本的数据,所以需要赋值 |
pd.to_numeric(arg, errors='raise', downcast=None)
的参数说明:
- arg:list、tuple、一维数组、Series
- errors:{‘ignore’, ‘raise’, ‘coerce’},默认是raise,有错误直接抛出。ignore将返回不能被转换的原始数据;coerce将不能被转换为数字类型的数据设置为NaN
- downcast:{‘integer’, ‘signed’, ‘unsigned’, ‘float’} , 默认是none。如果设置了某一类型的数据,那么pandas会将原始数据转为能存储的最小子型态。如float的子型态有float16,float32,float64,所以设置了downcast=float,则会将数据转为能够以较少bytes去存储一个浮点数的float16。另外,downcast参数和errors参数是分开的,如果downcast过程中出错,即使errors设置为ignore也会抛出异常。
关于downcast参数用法,例子如下:
1 | # 这个例子是用concat方法将处理之后float类型数据块和非float类型的数据块合并 |
2)astype()
方法
astype是pandas对象的方法,可以将DataFrame和Series转为指定的类型。
1 | # 以下例子不以上面数据为例 |
astype也会转换出错:s.astype(np.unit8)
3)infer_objects()
方法
该方法不接受任何参数,尝试将object类型的数据转为更合适的格式。不能被转换的数据则保持原样。
1 | df = df.infer_objects() |