DataFrame类的dtype介绍如下:
object: 定义该列值可以存放任意类型的内容,比如float64, str, int32等等。从excel读入时,空值将以float64形式存储为np.NaN。
float64: 即浮点形,为numpy的浮点形,而不是python内置类型的float,在numpy中运行时相较于float有性能优势,空值存储为np.NaN
pd.StringDtype(): pandas的内置字符串类型,空值为pd.NA。显示定义这个类型的列后,列中所有值都将是str,而不像object,会将某个值推断为非str类型。
列定义为dtype=object时,该列中每行的值的实际存储类型可以有多处。 但列定义为float64或int32时,所有值必须都是符合该定义类型的数值,或np.NaN(一般从excel读入空值时便是np.NaN)。
列定义为dtype=np.float64时,必须确保每个值要么是空,要么是能转为数值的字符串。整个列类型为numpy.float64
列定义为dtype=str时,所有值都会实际以str存储,但整个列的类型仍然为object,既后续可能追加非str类型的值。
列定义为dtype=pd.StringDtype()是,所有值都会实际以str存储,但整个列的类型为string[python],既后续追加的新值必须也是str。
当使用类似df_object['cola'].str.contains('abc', na=False))
这样的函数时,一定要确保该列都为str的值,否则,遇到推断为非str值时,就会报错。所以建议如果要在某列上使用这种函数,应该显示指定dtype=str或pd.StringDtype()。
举列
import pandas as pd
import numpy as np
df_object = pd.DataFrame({"cola": [33,34.1,35,36]}, dtype=object) # 列类型为object
type(df_object['cola'][0]) # 输出结果为 int
df_object['cola'][0] # 输出结果为 33
type(df_object['cola'][1]) # 输出结果为 float (注意,这里该值类型为float, 而不是numpy.float64)
df_object['cola'][1] # 输出结果为 34.1
df_float = pd.DataFrame({"cola": [33,34.1,35,36]}, dtype=np.float64) # 列类型为float64
type(df_float ['cola'][1]) # 输出结果为 numpy.float64
df_float['cola'][1] # 输出结果为 34.1
df_str = pd.DataFrame({"cola": [33,34,35,36]}, dtype=str) # 列类型仍然为object
type(df_str['cola'][1]) # 输出结果为 str
df_str['cola'][1] # 输出结果为 '34.1'
df_pdstr = pd.DataFrame({"cola": [33,34,35,36]}, dtype=pd.StringDtype()) # 列类型为string[python]
type(df_pdstr['cola'][1]) # 输出结果为 str
df_pdstr['cola'][1] # 输出结果为 '34.1'
标签:float64,df,dtype,object,str,pandas,cola
From: https://www.cnblogs.com/rolandhe/p/18486566