pandas操作:变量类型自动转换
本篇是pandas100个骚操作的第一篇:变量类型自动转换
在用pandas进行数据清洗的过程中,变量的类型转换是一个必然会遇到的步骤。清洗初期查看dtypes经常出现object类型,但其实变量本身可能就是个字符串,或者是数字(但因存在空值,导致出现了object类型)。
通常大家所熟知的方法是使用astype进行类型转换,或者自己利用astype造个轮子,写个函数方法实现自动转换类型。
本次介绍一个pandas里可实现自动转换变量类型的方法convert_dtypes。利用它可以一次性全部转换为最理想的类型。
一、使用方法
默认情况下,convert_dtypes将尝试将Series或DataFrame中的每个Series转换为支持的dtypes。它可以对Series和DataFrame都直接使用。
这个方法的参数如下。
# 是否应将对象dtypes转换为最佳类型
infer_objects bool,默认为True
# 对象dtype是否应转换为StringDtype()
convert_string bool,默认为True
# 如果可能,是否可以转换为整数扩展类型
convert_integer bool,默认为True
# 对象dtype是否应转换为BooleanDtypes()
convert_boolean bool,默认为True
# 如果可能,是否可以转换为浮动扩展类型。
# 如果convert_integer也为True,则如果可以将浮点数忠实地转换为整数,则将优先考虑整数dtype
convert_floating bool,默认为True
二、实例
下面看个例子。
首先创建一组数据,通过dtype规定每个变量的类型。
df = pd.DataFrame(
{
"a": pd.Series([1, 2, 3], dtype=np.dtype("int32")),
"b": pd.Series(["x", "y", "z"], dtype=np.dtype("O")),
"c": pd.Series([True, False, np.nan], dtype=np.dtype("O")),
"d": pd.Series(["h", "i", np.nan], dtype=np.dtype("O")),
"e": pd.Series([10, np.nan, 20], dtype=np.dtype("float")),
"f": pd.Series([np.nan, 100.5, 200], dtype=np.dtype("float")),
}
)
DataFrame 变量类型转换
先从整个对dataframe操作开始。
>>> df
a b c d e f
0 1 x True h 10.0 NaN
1 2 y False i NaN 100.5
2 3 z NaN NaN 20.0 200.0
>>> df.dtypes
a int32
b object
c object
d object
e float64
f float64
dtype: object
通过结果可以看到,变量都是是创建时默认的类型。但其实变量是有整数、字符串、布尔的,其中有的还存在空值。
>>> dfn = df.convert_dtypes()
>>> dfn
a b c d e f
0 1 x True h 10
1 2 y False i100.5
2 3 z20 200.0
下面使用convert_dtypes进行转换。
>>> dfn.dtypes
a Int32
b string
c boolean
d string
e Int64
f Float64
dtype: object
变量类型已经转换为我们想要的了。
Series 变量类型转换
对Series的转换也是一样的。下面的Seires中由于存在nan空值所以类型为object。
s = pd.Series(["a", "b", np.nan])
>>> s
0 a
1 b
2 NaN
dtype: object
然后我们通过convert_dtypes成功转换为String。
>>> s.convert_dtypes()
0 a
1 b
2
dtype: string
如果未来增加了新类型,convert_dtypes方法也会同步更新,并支持新的变量类型。
相关推荐HOT
更多>>jquery获取属性值
要获取 jQuery 元素的属性值,您可以使用 attr() 函数。该函数接受一个属性名作为参数,并返回该属性的值。详情>>
2023-04-21 10:25:53字符串和字符数组有何区别
字符串(String)和字符数组(Character Array)是两种在编程中用于处理文本数据的数据类型,它们在一些方面有区别。数据类型:字符串是一个引用类...详情>>
2023-04-14 14:47:15测试工程师需要的技能
测试设计和执行:测试工程师需要具备良好的测试设计和执行能力,包括编写测试用例、测试场景、测试数据,执行测试,记录测试结果和缺陷信息等。详情>>
2023-04-12 15:36:04持续集成是什么意思
持续集成(Continuous Integration,简称CI)是一种软件开发和测试实践,旨在通过频繁地将代码集成到共享代码仓库,并自动构建、测试和发布软件,...详情>>
2023-04-11 11:53:11