在熊猫中爆炸具有不同大小列表列的多个列

时间:2020-03-22 12:26:06

标签: python pandas dataframe

我遇到以下情况,我可能在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
  1. 和提交的时间应在两个后续行时间之间。 这样的事情。

    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

1 个答案:

答案 0 :(得分:1)

首先,可以根据需要使用0x7Fconcatstr.split创建爆炸列。使用stackreset_index可以获取关联的“时间”列。然后,您需要更改“时间”列中的值以创建插值。我不确定是否可以直接插值datetime列,但是可以将类型更改为joinint64,如果它们的值与上一行中的mask和{{1}相同}。像这样:

shift

我不确定您想要的是COL2中缺少的值,例如因此您可能需要一些interpolate才能解决。