Pandas 和 NumPy 被认为是科学计算与机器学习中必不可少的库,因为它们具有直观的语法和高性能的矩阵计算能力。下面对 Pandas 与 NumPy 进行简单的总结,如下表所示:
比较项 | Pandas | NumPy |
---|---|---|
适应性 | Pandas主要用来处理类表格数据。 | NumPy 主要用来处理数值数据。 |
工具 | Pandas提供了Series和DataFrame数据结构。 | NumPy 构建了 ndarray array来容纳数据。 |
性能 | Pandas对于处理50万行以上的数据更具优势。 | NumPy 则对于50万以下或者更少的数据,性能更佳。 |
内存利用率 | 与 NumPy相比,Pandas会消耗大量的内存。 | NumPy 会消耗较少的内存。 |
对象 | Pandas 提供了 DataFrame 2D数据表对象。 | NumPy 则提供了一个多维数组 ndarray 对象 |
在某些情况下,需要执行一些 NumPy 数值计算的高级函数,将 DataFrame 对象转换为 NumPy ndarray 数组,并将其返回:
pandas v0.24.0以上版本,可以使用to_numpy()
方法,
语法
DataFrame.to_numpy(dtype=None, copy=False)
参数说明如下:
dtype:可选参数,表示数据类型;
copy:布尔值参数,默认值为 Fales,表示返回值不是其他数组的视图。
示例
import numpy as np
import pandas as pd
df = pd.DataFrame(data={'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]},
index=['a', 'b', 'c'])
# 转换整个 DataFrame
df.to_numpy()
# array([[1, 4, 7],
# [2, 5, 8],
# [3, 6, 9]])
# 转换指定列
df[['A', 'C']].to_numpy()
# array([[1, 7],
# [2, 8],
# [3, 9]])
通过Series.values实现series转换为ndarray
import numpy as np
import pandas as pd
df = pd.DataFrame(data={'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]},
index=['a', 'b', 'c'])
df.values
# array([[1, 4, 7],
# [2, 5, 8],
# [3, 6, 9]])
# Series转换成adarray
data2 = pd.Series([1, 2, 3])
data2.values
# array([1,2,3])
import numpy as np
import pandas as pd
df = pd.DataFrame(data={'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]},
index=['a', 'b', 'c'])
# 在较高版本中可能会没有这个函数
df.as_matrix()
# array([[1, 4, 7],
# [2, 5, 8],
# [3, 6, 9]])
import numpy as np
import pandas as pd
df = pd.DataFrame(data={'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]},
index=['a', 'b', 'c'])
np.array(df)
# array([[1, 4, 7],
# [2, 5, 8],
# [3, 6, 9]])
1、如果ndarray是二维数组,需要通过map结合lamdba
import numpy as np
import pandas as pd
data = np.array([1, 2, 3]).reshape(3, 1) # 二维数组
data_list = map(lambda x: x[0], data)
ser = pd.Series(data_list)
2、如果ndarray是一维数组,则通过data.tolist()即可
import numpy as np
import pandas as pd
data = np.array([1, 2, 3])
ser = pd.Series(data.tolist())
1、直接通过pd.DataFrame转换
import numpy as np
import pandas as pd
data = np.array([['2019/08/02', 'zhansan', 1], ['2019/08/03', 'lisi', 2], ['2019/08/04', 'wangwu', 3]])
df = pd.DataFrame(data)
打印df为
2、指定索引、数据、列名例子
import numpy as np
import pandas as pd
data = np.array([['', 'Col1', 'Col2'], ['Row1', 1, 2], ['Row2', 3, 4]])
df = pd.DataFrame(data=data[1:, 1:], # 从第2行开始并且第2列开始作为数据
index=data[1:, 0], # 第1列做索引,从第2行开始
columns=data[0, 1:]) # 第1行作为列名,从第2列开始