我遇到以下情况,我可能在csv文件中获得300列,其中一些是列表参数(50列),它们的大小可能不均匀,其中没有值。
Time COL1 COL2
2020-03-13 10:43:00.500 0.0 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0
2020-03-13 10:43:00.900 10.0 20.0 30.0 70.0 10.0 20.0
2020-03-13 10:44:00.100 10.0 20.0 30.0 70.0
我想做
1.根据最高频率将列爆炸至rows.ex:第一行最大频率(用空格分隔的值)
是5,在第二行是4
Time COL1 COL2
2020-03-13 10:43:00.500 0.0 50.0
2020-03-13 10:43:00.580 10.0 60.0
2020-03-13 10:43:00.660 20.0 70.0
2020-03-13 10:43:00.740 30.0 80.0
2020-03-13 10:43:00.820 40.0 90.0
2020-03-13 10:43:00.900 10.0 10.0
2020-03-13 10:43:00.1150 20.0 20.0
2020-03-13 10:43:00.1400 30.0
2020-03-13 10:43:00.1650 80.0
2020-03-13 10:44:00.100 10.0
2020-03-13 10:44:00.350 20.0
2020-03-13 10:44:00.600 30.0
2020-03-13 10:44:00.850 70.0
和提交的时间应在两个后续行时间之间。 这样的事情。
curr_row_time = data_frame ['Time'] [ind1]
next_row_time = data_frame ['时间'] [ind1 + 1]
timestamp1 = datetime.datetime.strptime(str(curr_row_time),
'%Y-%m-%d%H:%M:%S.%f')
timestamp2 = datetime.datetime.strptime(str(next_row_time),
'%Y-%m-%d%H:%M:%S.%f')
time_delta =(timestamp2-timestamp1).total_seconds()* 1000
time_step_increment = time_delta / max_frequency(应为一行的最大值)
最后一行的最大频率可以取平均值或上次使用的最大频率
赞赏是否有关于第1点的建议,但第2点是第二优先级,但也有建议。
我在下面使用的第1点
我尝试了以下链接中提到的解决方案,方法是将空格分隔为列表 10.0 20.0 30.0 70.0 ----> [10.0,20.0,30.0,70.0] Pandas Explode on Multiple columns
File "<stdin>", line 3, in <listcomp>
File "<__array_function__ internals>", line 6, in concatenate
ValueError: zero-dimensional arrays cannot be concatenated
以下链接适用于等长列表列 Split (explode) pandas dataframe string entry to separate rows
答案 0 :(得分:1)
首先,可以根据需要使用0x7F
,concat
和str.split
创建爆炸列。使用stack
和reset_index
可以获取关联的“时间”列。然后,您需要更改“时间”列中的值以创建插值。我不确定是否可以直接插值datetime列,但是可以将类型更改为join
,int64
,如果它们的值与上一行中的mask
和{{1}相同}。像这样:
shift
我不确定您想要的是COL2中缺少的值,例如因此您可能需要一些interpolate
才能解决。