python - 如何将分段/部分中的 CSV 加载到嵌套列表/二维数组中?
问题描述
抱歉,如果我可能使用了错误的术语,但我试图弄清楚如何在一定数量的(时间)步骤中将 CSV 加载到嵌套列表/二维数组中。
所以如果我需要编辑/添加一些东西,请大声喊叫!
澄清一下......我的 CSV 的形状为 (63564, 78),其中包含已针对人类关节关键点进行处理的短视频文件:
import pandas as pd
keypoints = pd.read_csv('keypoints_new.csv')
Frame , NoseX , NoseY , NoseC , SchoulderX ..., Label, MovementID
1 , 901.059, 336.042, 0.935647, 901.166 ..., Plie , Plie_1
2 , 901.027, 336.078, 0.938929, 901.162 ..., Plie , Plie_1
...
113 , 880.452, 406.757, 0.972856, 904.148 ..., Plie , Plie_32
...
80 , 902.089, 263.018, 0.958629, 845.364 ..., Jete , Jete_20
...
我希望上面的结构是有意义的,但基本上它是一个包含 75 行关节坐标的 #Frame per video (MovementID) 列表,最后是(3 个不同的)标签,它只是供以后使用的通用运动。对于我的深度学习网络,我想在嵌套列表/二维数组中以时间步长加载这些数据。
例如,如果我希望每个 MovementID 每 60 行/时间步加载 123 帧的帧,则结构将如下所示:
#random numbers
Plie_1 - 123 frames - 75 datapoints per line:
[[83, 91, 1, ..., 1253, 927],
[73, 8, 15, ..., 55, 927],
[711, 632, 71]]
Plie_2 - 184 frames:
[[124, 256, 8, ..., 1187, 987],
[37, 45, 13, ..., 12, 987],
[86, 4, 745, ..., 63, 196]
[452, 872, 91, 80]]
etc
剩余的行将使用 Keras 填充序列数据填充 0,以便它具有相同的长度,但这是以后的问题;)
我知道它可能是通过使用 for 循环来实现的,但目前我不知道如何在这些时间步中拆分它并将其直接转换为每个 MovementID 的嵌套列表。
解决方案
您可以使用 pandas 加载 csv,然后使用 MovementID 创建新的数据帧,然后使用 as_matrix() 将这些数据帧转换为 ndarray
例子:
import pandas as pd
a = [1, 2, 3, 4, 5, 6]
b = [1, 3, 4, 5, 6, 7]
c = ['a', 'b', 'a', 'c', 'd', 'b']
val = list(zip(a, b, c))
df = pd.DataFrame(val, columns=['num1', 'num2', 'MovementID'])
list_dfs = []
for v in df['MovementID'].unique().tolist():
new_df = df[df['MovementID'] == v].drop(columns='MovementID').as_matrix()
list_dfs.append(new_df)
print('MovementID =', v)
print(new_df)
输出:
MovementID = a
[[1 1]
[3 4]]
MovementID = b
[[2 3]
[6 7]]
MovementID = c
[[4 5]]
MovementID = d
[[5 6]]
推荐阅读
- git - 为什么有些提交不属于任何分支?
- java - 在java的堆空间中创建的对象如何具有全局访问权限?
- javascript - 分配一个字符串但取回一个对象 - 浏览器在玩吗?
- java - How to overwrite a jar file in a maven generated war?
- swift - Firestore 按时间排序,但按 ID 排序
- php - insert key/value pair into an array with two level
- java - 在 Java 中如何计算一系列数字以找到乘积,即传递给使用可变长度参数列表的方法
- asp.net - JSON 列表不使用 Distinct 命令删除重复项
- jsp - 同一个jsp上的两个下拉列表返回null
- c# - 使用 ARBCreateSubscriptionRequest 验证信用卡或借记卡,例如 Customer Profile 的 validationMode 字段