我有一长串数据,有意义的数据夹在0个值之间,下面是它的样子

0
0
1
0
0
2
3
1
0
0
0
0
1
0

0的长度和有意义的值序列是可变的。我想提取有意义的序列,每一个序列都在一个数据帧中成为一行。例如,可以将上述数据提取为:
1
2   3   1
1

我用这段代码来“切片”有意义的数据:
import pandas as pd
import numpy as np

raw = pd.read_csv('data.csv')

df = pd.DataFrame(index=np.arange(0, 10000),columns = ['DT01', 'DT02', 'DT03', 'DT04', 'DT05', 'DT06', 'DT07', 'DT08', 'DT02', 'DT09', 'DT10', 'DT11', 'DT12', 'DT13', 'DT14', 'DT15', 'DT16', 'DT17', 'DT18', 'DT19', 'DT20',])
a = 0
b = 0
n=0

for n in range(0,999999):
    if raw.iloc[n].values > 0:
        df.iloc[a,b] = raw.iloc[n].values
        a=a+1
        if raw [n+1] == 0:
            b=b+1
            a=0

但是我一直得到KeyError:n,而n是第一行的值不同于0之后的行。
我的代码哪里有问题?在速度和内存成本方面,有什么方法可以改进它吗?
非常感谢你

最佳答案

您可以使用:

df['Group'] = df['col'].eq(0).cumsum()
df = df.loc[ df['col'] != 0]

df = df.groupby('Group')['col'].apply(list)
print (df)

Group
2          [1]
4    [2, 3, 1]
8          [1]
Name: col, dtype: object

df = pd.DataFrame(df.groupby('Group')['col'].apply(list).values.tolist())
print (df)
   0    1    2
0  1  NaN  NaN
1  2  3.0  1.0
2  1  NaN  NaN

关于python - Pandas使用For Loop分配值时出现KeyError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46030832/

10-11 01:55