私の質問は、this answerからPhilまでです。 コード私は<class>の代わりに<class 'numpy.str'>を取得する方法numpy.object _ '>
sa = df_to_sarray(df.reset_index())
を実行する場合、私は次のような結果を得るでしょうしながら、
df = pd.DataFrame([[1,31,2.5,1260759144], [1,1029,3,1260759179],
[1,1061,3,1260759182],[1,1129,2,1260759185],
[1,1172,4,1260759205],[2,31,3,1260759134],
[2,1111,4.5,1260759256]],
index=list(['a','c','h','g','e','b','f',]),
columns=list(['userId','movieId','rating','timestamp']))
df.index.names=['ID No.']
df.columns.names=['Information']
def df_to_sarray(df):
"""
Convert a pandas DataFrame object to a numpy structured array.
This is functionally equivalent to but more efficient than
np.array(df.to_array())
:param df: the data frame to convert
:return: a numpy structured array representation of df
"""
v = df.values
cols = df.columns
# df[k].dtype.type is <class 'numpy.object_'>,I want to convert it to numpy.str
types = [(cols[i], df[k].dtype.type) for (i, k) in enumerate(cols)]
dtype = np.dtype(types)
z = np.zeros(v.shape[0], dtype)
for (i, k) in enumerate(z.dtype.names):
z[k] = v[:, i]
return z
sa = df_to_sarray(df.reset_index())
print(sa)
フィルの答えは、うまく機能しています。
array([('a', 1, 31, 2.5, 1260759144), ('c', 1, 1029, 3.0, 1260759179),
('h', 1, 1061, 3.0, 1260759182), ('g', 1, 1129, 2.0, 1260759185),
('e', 1, 1172, 4.0, 1260759205), ('b', 2, 31, 3.0, 1260759134),
('f', 2, 1111, 4.5, 1260759256)],
dtype=[('ID No.', 'O'), ('userId', '<i8'), ('movieId', '<i8'), ('rating', '<f8'), ('timestamp', '<i8')])
私は次のようにdtypeを取得できたらいいですか?
dtype=[('ID No.', 'S'), ('userId', '<i8'), ('movieId', '<i8'), ('rating', '<f8'), ('timestamp', '<i8')]
オブジェクトの代わりに文字列。
私はdf [k] .dtype.typeの型をテストしました。私はそれが<class 'numpy.object_'>
であることを発見しました。これをnumpy.strに変換したいと思います。どうやってするか?
'' 'df [col] .astype(str)' ''を試したことがありますか? –
'種類 'はiistです。だから、最初のタプルを変更できるはずです。これはおそらく '(ID番号 '、' O ')'です。 – hpaulj
私は 'オブジェクト'タイプを '文字列'に変換するだけで、 'int'型の他のカラムについては、それらを 'int'として保持したいと思います。 – Renke