在处理的数据的时候,最常遇到的就是使用 Pandas 的 Dataframe 与 Numpy 的 ndarray。以下以 mtcars 为例,该数据集包含 32 笔汽车模型的数据, 这些数据取自1974年《汽车趋势》杂志,对于每辆汽车, 有 11 个特徵值,详细说明就省略,因为本篇文章主要是讨论如何在两种常见的对象之间转换。
取得三笔mtcars的数据,以字符串的方式存取。
strs = ['0,4.58257569495584,6,160.0,110,3.9,2.62,16.46,0,1,4,4,1,Mazda RX4,Mazda RX4',
'1,4.58257569495584,6,160.0,110,3.9,2.875,17.02,0,1,4,4,1,Mazda RX4 Wag,Mazda RX4 Wag',
'2,4.77493455452533,4,108.0,93,3.85,2.32,18.61,1,1,4,1,1,Datsun 710,Datsun 710']
将字符串转成列表,结果如下图。
arrs = []
[arrs.append(arr.split(',')) for arr in strs]
将列表转成Numpy ndarray,结果如下图。
import numpy as np
npMtcars = np.array(arrs)
npMtcars.shape
将Numpy ndarray 转成 Pandas Dataframe 数据框,结果如下图。
import pandas as pd
df = pd.DataFrame(npMtcars)
df
图三 Numpy ndarray 转成 Pandas Dataframe 数据框的结果
在数据框的对象中,要转换成 Numpy ndarray 是很簡單的,只要存取 values 这个属性即可,结果如下图。
print(type(df.values))
df.values
图四 Pandas Dataframe 数据框得到 Numpy ndarray 对象
或是调用 to_numpy() 这个方法,结果如下图。
图五 Pandas Dataframe 数据框调用 to_numpy()
如果要转换成列表 list 就比较麻烦一点,不像 Series 对象有 to_list() 的方法,所以可以从 ndarray 对象转换成列表 list,结果如下图。
df2list = df.values.tolist()
df2list
图六 Pandas Dataframe 数据框转换成列表 list
建議不要用 list() 方法来转换,会达到预期外的结果,结果如下图。虽然得到的都是列表的结果,直接从数据框转换的结果会是字段数;而 values 属性则是只有第一层是列表,下一层还是 ndarray,
df2list1 = list(df)
print(type(df2list1))
print(df2list1)
df2list2 = list(df.values)
print(type(df2list2),type(df2list2[0]))
df2list2