我有一长串数据,有意义的数据夹在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/