将 Pandas Dataframe 中的选择列转换为 Numpy 数组
Posted
技术标签:
【中文标题】将 Pandas Dataframe 中的选择列转换为 Numpy 数组【英文标题】:Convert Select Columns in Pandas Dataframe to Numpy Array 【发布时间】:2015-10-25 16:05:24 【问题描述】:我想将除熊猫数据框的第一列之外的所有内容都转换为 numpy 数组。由于某种原因,使用DataFrame.to_matrix()
的columns=
参数不起作用。
df:
viz a1_count a1_mean a1_std
0 n 3 2 0.816497
1 n 0 NaN NaN
2 n 2 51 50.000000
我尝试了X=df.as_matrix(columns=[df[1:]])
,但这会产生一个包含所有NaN
s 的数组
【问题讨论】:
您传递的是行而不是列名 【参考方案1】:简单的方法是“值”属性df.iloc[:,1:].values
a=df.iloc[:,1:]
b=df.iloc[:,1:].values
print(type(df))
print(type(a))
print(type(b))
所以,你可以得到类型
<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.frame.DataFrame'>
<class 'numpy.ndarray'>
【讨论】:
或者如果你想按名称而不是位置提取列:df[['a1_count', 'a1_mean', 'a1_std']].values
【参考方案2】:
请使用Pandas to_numpy()
方法。下面是一个例子--
>>> import pandas as pd
>>> df = pd.DataFrame("A":[1, 2], "B":[3, 4], "C":[5, 6])
>>> df
A B C
0 1 3 5
1 2 4 6
>>> s_array = df[["A", "B", "C"]].to_numpy()
>>> s_array
array([[1, 3, 5],
[2, 4, 6]])
>>> t_array = df[["B", "C"]].to_numpy()
>>> print (t_array)
[[3 5]
[4 6]]
希望这会有所帮助。您可以使用
选择任意数量的列columns = ['col1', 'col2', 'col3']
df1 = df[columns]
然后应用to_numpy()
方法。
【讨论】:
【参考方案3】:columns
参数接受列名的集合。您正在传递一个包含两行数据框的列表:
>>> [df[1:]]
[ viz a1_count a1_mean a1_std
1 n 0 NaN NaN
2 n 2 51 50]
>>> df.as_matrix(columns=[df[1:]])
array([[ nan, nan],
[ nan, nan],
[ nan, nan]])
改为传递您想要的列名:
>>> df.columns[1:]
Index(['a1_count', 'a1_mean', 'a1_std'], dtype='object')
>>> df.as_matrix(columns=df.columns[1:])
array([[ 3. , 2. , 0.816497],
[ 0. , nan, nan],
[ 2. , 51. , 50. ]])
【讨论】:
谢谢。我有一种感觉,我错过了一些微不足道的东西。 我想补充一点,as_matrix 将在未来的版本中被删除,并且我收到的消息说要改用 .values。 as_matrix 现已弃用。 尝试使用values
而不是as_matrix
从 0.24.0 版开始,只需在您的列上使用 to_numpy
方法 (pandas.pydata.org/pandas-docs/stable/reference/api/…)【参考方案4】:
希望这个简单的一个班轮有所帮助:
cols_as_np = df[df.columns[1:]].to_numpy()
【讨论】:
【参考方案5】:转换为 Numpy 数组的最佳方法是使用 '.to_numpy(self, dtype=None, copy=False)'。它是 0.24.0.Refrence 版本中的新功能@
你也可以使用'.array'.Refrence
Pandas .as_matrix 自 0.23.0 版起已弃用。
【讨论】:
【参考方案6】:最快最简单的方法是使用.as_matrix()
。一条短线:
df.iloc[:,[1,2,3]].as_matrix()
给予:
array([[3, 2, 0.816497],
[0, 'NaN', 'NaN'],
[2, 51, 50.0]], dtype=object)
通过使用列的索引,您可以将此代码用于具有不同列名的任何数据框。
以下是您的示例的步骤:
import pandas as pd
columns = ['viz', 'a1_count', 'a1_mean', 'a1_std']
index = [0,1,2]
vals = 'viz': ['n','n','n'], 'a1_count': [3,0,2], 'a1_mean': [2,'NaN', 51], 'a1_std': [0.816497, 'NaN', 50.000000]
df = pd.DataFrame(vals, columns=columns, index=index)
给予:
viz a1_count a1_mean a1_std
0 n 3 2 0.816497
1 n 0 NaN NaN
2 n 2 51 50
然后:
x1 = df.iloc[:,[1,2,3]].as_matrix()
给予:
array([[3, 2, 0.816497],
[0, 'NaN', 'NaN'],
[2, 51, 50.0]], dtype=object)
x1 是numpy.ndarray
。
【讨论】:
以上是关于将 Pandas Dataframe 中的选择列转换为 Numpy 数组的主要内容,如果未能解决你的问题,请参考以下文章
如何将列名排序到 Pandas Dataframe(分类数据)中的 bin 中
Pandas DataFrame 中的 Neuraxle 选择列