将列转换为numpy数组

2024-09-30 04:37:26 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有这样的数据帧:

Type   Vector
A      [0.2340, 0.5463, 0.5652, 0.3243, 0.3243]
B      [0.3244, 0.5566, 0.2344, 0.1213, 0.9821]
C      [0,5652,  0.3453, 0.3454, 0.5656, 0.6766]
D      [0,5125,  0.3345, 0.1112, 0.4545, 0.6324]

我想用np.linalg.norm计算这些向量的距离。我想要的是

Type   Vector                                    distance1   distance2 
 A     [0.2340, 0.5463, 0.5652, 0.3243, 0.3243]   A-B          A-C
distance3
A-D

作为新列。 编辑:我也这么做过:

df['vector'] = df['vector'].apply(lambda x: np.array(x)) 
print(type(df['vector'].iloc[0]))

结果是:

<class 'numpy.ndarray'>

当我简单地说:

print(np.linalg.norm(df['vector'].iloc[0] -df['vector'].iloc[1]))

我得到一个浮点值

但是,我迭代得到的行:

ValueError: Wrong number of items passed 544, placement implies 1

我怎么能解决呢? 注意:向量的长度确实是544个字符


Tags: 数据距离normdftypenp向量print
1条回答
网友
1楼 · 发布于 2024-09-30 04:37:26

如果使用pickle,请使用pickle导入:

import pandas as pd

df = pd.read_pickle('your_file_name')

由于pandas是基于numpy构建的,因此现在可以将所需列作为numpy数组:

import numpy as np:

np.linalg.norm(x = df['your column'])

请注意你的向量-他们没有相同的大小!例如C和D的长度为6。我想你的逗号应该是第一个值的一个点。你知道吗

编辑:

一个完整的例子是:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'A':[0.2340, 0.5463, 0.5652, 0.3243, 0.3243],
    'B':[0.3244, 0.5566, 0.2344, 0.1213, 0.9821],
    'C':[0.5652,  0.3453, 0.3454, 0.5656, 0.6766],
    'D':[0.5125,  0.3345, 0.1112, 0.4545, 0.6324]
})

df_distances = df.transpose()           #Transpose columns to rows

for col in df:
    for col2 in df:
        df_distances["{}_{}".format(col, col2)] = np.linalg.norm(df[col] - df[col2])

编辑2(与我的评论相关):

我建议您使用所需的值生成一个列表或dict,因为将所有内容附加到表中可能会导致一个非常大的表。 代码将如下所示:

dic = {}

for col in df:
    for col2 in df:
        dic["{}_{}".format(col, col2)] = np.linalg.norm(df[col] - df[col2])

相关问题 更多 >

    热门问题