1. pd.DataFrame
1.1. 获取schema
import pandas as pd
df = pd.DataFrame(data={"age": [1, 2, 3], "name": ['a', 'b', 'c']})
print(df.dtypes)
输出:
age int64
name object
dtype: object
df.dtypes
是一个Series
,它的索引就是列名,值是类型,看一下age的类型:
import pandas as pd
df = pd.DataFrame(data={"age": [1, 2, 3], "name": ['a', 'b', 'c']})
t = df.dtypes['age']
print(type(t))
print(t)
print(t.type)
输出:
<class 'numpy.dtype'>
int64
<class 'numpy.int64'>
从输出来看dtypes
的结构实际上是列名->dtype而并不是像np.int64
这样的类型。
2. pd.Series
2.1. 转换
s = pd.Series([1, 2, 3])
print(type(s.values))
print(s.values) # 转换成numpy 数组,如果是数字
print(s.values.tolist()) # 转换成python数组
print(s.to_dict()) # 转换成字典,索引为key
输出:
<class 'numpy.ndarray'>
[1 2 3]
[1, 2, 3]
{0: 1, 1: 2, 2: 3}
3. numpy 的类型
3.1. 基本类型
在numpy中有np.int64
, np.float64
, 这样的类型,它是一个class,这个class的实例是什么呢?
import numpy as np
i = np.int64(1)
print(type(i))
print(i)
print(i == 1)
输出:
<class 'numpy.int64'>
1
True
在numpy中并没有使用python的基本类型,而是它自己的一套,int/int64/int32 之间的关系怎样的?
int:
import numpy as np
print(np.int == int)
输出:
True
np.int实际上就是python的int;
int32:
实际上是np.intc
,它继承于signedinteger, 其定义:
class intc(signedinteger):
""" 32-bit integer. Character code 'i'. C int compatible. """
def __abs__(self, *args, **kwargs): # real signature unknown
""" abs(self) """
pass
int64:
实际上是np.long
,它继承于signedinteger, 其定义:
class long(signedinteger):
""" 64-bit integer. Character code 'l'. Python int compatible. """
int32/int64 是numpy的类型,都继承于signedinteger
, np.int是python的类型跟那俩没啥关系:
import numpy as np
i1 = np.int64(1)
i2 = np.int32(1)
i3 = np.int(1)
print(isinstance(i1, np.signedinteger))
print(isinstance(i2, np.signedinteger))
print(isinstance(i3, np.signedinteger))
print(type(i3))
输出:
True
True
False
<class 'int'>
应用1:判断一个类型是否为int
如果是np.int/np.int32/int64 任何一个类的实例就是int。