大家好,又见面了,我是你们的朋友全栈君。
当你在数据帧中看到dtype(‘O’) ,这意味着Pandas字符串。
什么是dtype ?
什么属于pandas或numpy ,或两者,或其他什么? 如果我们检查一下pandas代码:
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’)或Pandas对象,它是Python类型字符串,这对应于Numpy string_或unicode_ types。
Pandas dtype Python type NumPy type Usage
object str string_, unicode_ Text
就像堂吉诃德一样,Pandas在Numpy上,Numpy了解你的系统的底层架构,并使用类numpy.dtype 。
数据类型对象是numpy.dtype类的一个实例, numpy.dtype 更加精确地理解数据类型,包括:
数据类型(整数,浮点数,Python对象等)
数据的大小(例如整数中的字节数)
数据的字节顺序(little-endian或big-endian)
如果数据类型是结构化的,则是其他数据类型的聚合(例如,描述由整数和浮点数组成的数组项)
结构“字段”的名称是什么
每个字段的数据类型是什么
每个字段占用的内存块的哪一部分
如果数据类型是子数组,那么它的形状和数据类型是什么
在这个问题的上下文中, 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 。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/145171.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...