python - 使用 Python 将对象数组转换为数组数组
问题描述
我有一个大型 .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 速度数组。
感谢任何帮助,谢谢!
#=====
只需添加(根据要求):
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 条目实际上是浮点数,并且您还希望将它们从字符串转换为浮点数,则可以使用:
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 - 在输入中放置两个条件
- reactjs - 如何在 Semantic-UI-React 项目中导入 Google 字体?
- mysql - SQL - 查找具有未知但稍微相似的值的行?
- python-3.x - librosa.util.exceptions.ParameterError:单声道音频的形状无效:ndim=2,shape=(1025, 5341)
- python - Python 漂亮的打印嵌套对象
- javascript - 在模态中实现可折叠在单击时在列表中展开全部
- mysql - SQL - 在一组行中选择全部或全部
- php - PHP - 根据键值对将一个数组拆分为 2 个数组
- google-cloud-composer - 添加与 gdrive 范围的 BigQuery 连接?
- c++ - 模板模板参数在什么情况下有用?