我有一个大型 .csv 数据库,其列名 VELOCITY 包含 3D 速度矢量。
VELOCITY 列的每个元素都具有以下形式:'(v1, v2, v3)'
读取我使用的数据:
df = pd.read_csv('database.csv')
df = pd.DataFrame(df)
现在,我尝试定义一个 velocity_array,其中每个元素都是 3D 速度矢量。
velocity_array = np.asarray(df['VELOCITY'])
我得到这样的结果:
['(a1, a2, a3)',
'(b1, b2, b3)',
'(c1, c2, c3)',
.
.
.
'(z1, z2, z3)']
这不是我需要的。我需要一组 3D 速度数组。像这样:
[[a1, a2, a3],
[b1, b2, b3],
[c1, c2, c3],
.
.
.
[z1, z2, z3]]
这样我就可以仅通过调用 velocity_array[i] 来恢复 3D-velocity-array。
感谢任何帮助,谢谢!
#=====
只需添加(根据要求):
df.head() 看起来像这样:
SC_VELOCITY EVENT_ID
0 (-7143.645, -825.2191, -2463.361) 388161
1 (-7143.645, -825.2191, -2463.361) 400028
2 (-7087.896, -1058.8871, -2533.3374) 415847
3 (-7024.463, -1291.3812, -2600.547) 527126
4 (-6953.418, -1522.4622, -2664.9265) 605939
最佳答案
从您的示例数据中可以看出,velocity_array
中的每个条目都有 2 个单引号括起条目,例如'(a1, a2, a3)'
。因此,假设您的条目实际上是字符串条目。
如果这是真的,您可以通过以下方式将列中的每个字符串转换为列表:
df['VELOCITY'] = df['VELOCITY'].str.strip("()").str.split(r',\s*')
结果:
velocity_array = np.asarray(df['VELOCITY'])
print(velocity_array)
输出:
[list(['a1', 'a2', 'a3']) list(['b1', 'b2', 'b3'])
list(['c1', 'c2', 'c3']) list(['z1', 'z2', 'z3'])]
编辑:
如果您的 a1、a2 条目实际上是 float ,并且您还希望将它们从字符串转换为 float ,您可以使用:
velocity_array = df['VELOCITY'].str.strip("()").str.split(r',\s*', expand=True).astype(float).to_numpy()
结果:
根据您的 df.head()
示例数据:
print(velocity_array)
[[-7143.645 -825.2191 -2463.361 ]
[-7143.645 -825.2191 -2463.361 ]
[-7087.896 -1058.8871 -2533.3374]
[-7024.463 -1291.3812 -2600.547 ]
[-6953.418 -1522.4622 -2664.9265]]
关于python - 使用 Python 将对象数组转换为数组数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68867081/