我在pandas中有一个数据框,我正在试图弄清楚它的值是什么类型。我不确定列'Test'
的类型是什么。但是,当我运行myFrame['Test'].dtype
时,我得到了;
dtype('O')
这是什么意思?
答案 0 :(得分:59)
这意味着:
'O' (Python) objects
第一个字符指定数据类型,其余字符指定每个项目的字节数,Unicode除外,它被解释为字符数。项目大小必须与现有类型相对应,否则将引发错误。支持的种类是 到现有类型,或将引发错误。支持的种类是:
'b' boolean
'i' (signed) integer
'u' unsigned integer
'f' floating-point
'c' complex-floating point
'O' (Python) objects
'S', 'a' (byte-)string
'U' Unicode
'V' raw data (void)
如果需要检查type
,则另一个answer有帮助。
答案 1 :(得分:10)
它意味着"一个python对象",即不是numpy支持的内置标量类型之一。
np.array([object()]).dtype
=> dtype('O')
答案 2 :(得分:4)
' O'代表对象。
#Loading a csv file as a dataframe
import pandas as pd
train_df = pd.read_csv('train.csv')
col_name = 'Name of Employee'
#Checking the datatype of column name
train_df[col_name].dtype
#Instead try printing the same thing
print train_df[col_name].dtype
第一行返回:dtype('O')
print语句的行返回以下内容:object
答案 3 :(得分:1)
dtype('O')
时,表示熊猫字符串。什么是dtype
?
属于pandas
或numpy
或两者兼而有之的东西?如果我们检查熊猫代码:
df = pd.DataFrame({'float': [1.0],
'int': [1],
'datetime': [pd.Timestamp('20180310')],
'string': ['foo']})
print(df)
print(df['float'].dtype,df['int'].dtype,df['datetime'].dtype,df['string'].dtype)
df['string'].dtype
它将输出如下:
float int datetime string
0 1.0 1 2018-03-10 foo
---
float64 int64 datetime64[ns] object
---
dtype('O')
您可以将最后一个解释为Pandas dtype('O')
或Python类型字符串的Pandas对象,这对应于Numpy string_
或unicode_
类型。
Pandas dtype Python type NumPy type Usage
object str string_, unicode_ Text
就像唐吉x德(Don Quixote)一样,熊猫(Pandas)也是Numpy一样,并且Numpy了解系统的基础架构,并为此使用了numpy.dtype
类。
数据类型对象是numpy.dtype
类的实例,该类可以更精确地理解数据类型,包括:
在此问题中,dtype
属于pands和numpy,尤其是dtype('O')
表示我们希望使用该字符串。
以下是一些测试代码,并附有说明: 如果我们将数据集作为字典
import pandas as pd
import numpy as np
from pandas import Timestamp
data={'id': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5}, 'date': {0: Timestamp('2018-12-12 00:00:00'), 1: Timestamp('2018-12-12 00:00:00'), 2: Timestamp('2018-12-12 00:00:00'), 3: Timestamp('2018-12-12 00:00:00'), 4: Timestamp('2018-12-12 00:00:00')}, 'role': {0: 'Support', 1: 'Marketing', 2: 'Business Development', 3: 'Sales', 4: 'Engineering'}, 'num': {0: 123, 1: 234, 2: 345, 3: 456, 4: 567}, 'fnum': {0: 3.14, 1: 2.14, 2: -0.14, 3: 41.3, 4: 3.14}}
df = pd.DataFrame.from_dict(data) #now we have a dataframe
print(df)
print(df.dtypes)
最后几行将检查数据框并记录输出:
id date role num fnum
0 1 2018-12-12 Support 123 3.14
1 2 2018-12-12 Marketing 234 2.14
2 3 2018-12-12 Business Development 345 -0.14
3 4 2018-12-12 Sales 456 41.30
4 5 2018-12-12 Engineering 567 3.14
id int64
date datetime64[ns]
role object
num int64
fnum float64
dtype: object
各种dtypes
df.iloc[1,:] = np.nan
df.iloc[2,:] = None
但是,如果我们尝试设置np.nan
或None
,则不会影响原始列dtype。输出将如下所示:
print(df)
print(df.dtypes)
id date role num fnum
0 1.0 2018-12-12 Support 123.0 3.14
1 NaN NaT NaN NaN NaN
2 NaN NaT None NaN NaN
3 4.0 2018-12-12 Sales 456.0 41.30
4 5.0 2018-12-12 Engineering 567.0 3.14
id float64
date datetime64[ns]
role object
num float64
fnum float64
dtype: object
因此,除非我们将所有列行都设置为np.nan
或None
,否则dtype
或np.nan
不会更改列None
。在这种情况下,列将分别变为float64
或object
。
您也可以尝试设置单行:
df.iloc[3,:] = 0 # will convert datetime to object only
df.iloc[4,:] = '' # will convert all columns to object
在这里要注意,如果我们在非字符串列中设置字符串,它将成为字符串或对象dtype
。