我有两个不同的数组,一个是字符串,另一个是整数.我想将它们连接到一个数组中,其中每列都具有原始数据类型.我目前的解决方案(见下文)将整个数组转换为dtype = string,这看起来非常低效.
combined_array = np.concatenate((A, B), axis = 1)
是否有可能多发dtypes的combined_array时候A.dtype = string和B.dtype = int?
假设我有一个如下所示的重组:
import numpy as np
# example data from @unutbu's answer
recs = [('Bill', '31', 260.0), ('Fred', 15, '145.0')]
r = np.rec.fromrecords(recs, formats = 'S30,i2,f4', names = 'name, age, weight')
print(r)
# [('Bill', 31, 260.0) ('Fred', 15, 145.0)]
Run Code Online (Sandbox Code Playgroud)
假设我想将某些列转换为浮点数.我该怎么做呢?我应该换成一个ndarray,然后再回到recarray吗?
根据这篇文章,我应该能够访问ndarray中列的名称作为a.dtype.names
但是,如果我将pandas DataFrame转换为带有df.as_matrix()或df.values的ndarray,则dtype.names字段为None.此外,如果我尝试将列名称分配给ndarray
X = pd.DataFrame(dict(age=[40., 50., 60.], sys_blood_pressure=[140.,150.,160.]))
print X
print type(X.as_matrix())# <type 'numpy.ndarray'>
print type(X.as_matrix()[0]) # <type 'numpy.ndarray'>
m = X.as_matrix()
m.dtype.names = list(X.columns)
Run Code Online (Sandbox Code Playgroud)
我明白了
ValueError: there are no fields defined
Run Code Online (Sandbox Code Playgroud)
更新:
我特别感兴趣的是矩阵只需要保存一个类型(它是一个特定数字类型的ndarray),因为我也想使用cython进行优化.(我怀疑numpy记录和结构化数组更难以处理,因为它们更自由地输入.)
实际上,我只想维护通过sci-kit预测器深层树的数组的column_name元数据.它的接口的.fit(X,y)和.predict(X)API不允许传递关于X和y对象之外的列标签的附加元数据.
如何从 DataFrame 中的两列创建结构化数组?我试过这个:
df = pd.DataFrame(data=[[1,2],[10,20]], columns=['a','b'])
df
a b
0 1 2
1 10 20
x = np.array([([val for val in list(df['a'])],
[val for val in list(df['b'])])])
Run Code Online (Sandbox Code Playgroud)
但这给了我这个:
array([[[ 1, 10],
[ 2, 20]]])
Run Code Online (Sandbox Code Playgroud)
但我想要这个:
[(1,2),(10,20)]
Run Code Online (Sandbox Code Playgroud)
谢谢!
我需要获取每列的类型以对其进行正确的预处理。
目前我通过以下方法执行此操作:
import pandas as pd
# input is of type List[List[any]]
# but has one type (int, float, str, bool) per column
df = pd.DataFrame(input, columns=key_labels)
column_types = dict(df.dtypes)
matrix = df.values
Run Code Online (Sandbox Code Playgroud)
由于我只使用 pandas 来获取 dtypes(每列)并使用 numpy 来获取其他所有内容,所以我想从我的项目中删除 pandas。
总之:有没有办法从 numpy 获取每列的(特定)数据类型
!或者:有没有一种快速的方法来重新计算ndarray的dtype(在拼接矩阵之后)