pandas实践

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。

原文地址:https://www.cnblogs.com/oaks/p/13567482.html