我有一个数据集安排在24小时内,我正在尝试创建一个数据清理系统,可以处理小时数可能会跳过的情况(例如从早上4点到下午3点,没有像这样的缺失线实例:)
DET_SCN DATE HOUR MINUTE COUNT OCCUPANCY DET_FAULT CC_FAULT SUB_STAT
D11136 07/01/2014 0 0 0 0 FALSE TRUE FALSE
D11136 07/01/2014 1 0 0 0 FALSE TRUE FALSE
D11136 07/01/2014 2 0 0 0 FALSE TRUE FALSE
D11136 07/01/2014 3 0 0 0 FALSE TRUE FALSE
D11136 07/01/2014 4 0 0 0 FALSE TRUE FALSE
D11136 07/01/2014 15 0 0 0 FALSE TRUE FALSE
D11136 07/01/2014 16 0 0 0 FALSE TRUE FALSE
D11136 07/01/2014 17 0 0 0 FALSE TRUE FALSE
D11136 07/01/2014 18 0 0 0 FALSE TRUE FALSE
D11136 07/01/2014 19 0 0 0 FALSE TRUE FALSE
D11136 07/01/2014 20 0 0 0 FALSE TRUE FALSE
D11136 07/01/2014 21 0 0 0 FALSE TRUE FALSE
D11136 07/01/2014 22 0 0 0 FALSE TRUE FALSE
D11136 07/01/2014 23 0 0 0 FALSE TRUE FALSE
我希望数据集插入并用NaN填充缺失的行 到目前为止,加载我的数据后我已经尝试了
dataIn = pd.read_csv(filename, delimiter=',')
frame = DataFrame(dataIn)
print "Cleaning %s " % filename
siteRef = frame['DET_SCN'].str.extract('(D\d{4})').apply(Series,1).stack()
armRef = frame['DET_SCN'].str.extract('(\d{1}$)').apply(Series,1).stack()
armRef.index = armRef.index.droplevel(-1)
siteRef.index = siteRef.index.droplevel(-1)
#append column names
siteRef.name= 'SITE_REF'
armRef.name = 'ARM_REF'
print "printing siteRef"
print siteRef
print "printing armRef"
print armRef
#frame.join(siteRef,armRef columns['SITE_REF','ARM_REF'])
cleanframe = pd.concat([siteRef,armRef,frame], axis=1)
cleanframe.set_index('HOUR').reindex_axis([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23],axis=1).head()
cleanframe.HOUR = cleanframe.HOUR.interpolate('linear')
但这对我没用。我不确定我做错了什么。我已经尝试在stackoverflow上查看其他答案,但没有找到答案。
提前感谢您的帮助。
编辑:cleanframe head看起来像这样 0 CC_FAULT COUNT DATE DET_FAULT DET_SCN HOUR MINUTE OCCUPANCY \
0 D1113 NaN NaN NaN NaN NaN NaN NaN NaN
1 D1113 NaN NaN NaN NaN NaN NaN NaN NaN
2 D1113 NaN NaN NaN NaN NaN NaN NaN NaN
3 D1113 NaN NaN NaN NaN NaN NaN NaN NaN
4 D1113 NaN NaN NaN NaN NaN NaN NaN NaN
SUB_STAT
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
清洁框架信息
<class 'pandas.core.frame.DataFrame'>
Int64Index: 37227 entries, 0 to 12408
Data columns (total 10 columns):
0 24818 non-null object
CC_FAULT 12409 non-null object
COUNT 12409 non-null float64
DATE 12409 non-null object
DET_FAULT 12409 non-null object
DET_SCN 12409 non-null object
HOUR 12409 non-null float64
MINUTE 12409 non-null float64
OCCUPANCY 12409 non-null float64
SUB_STAT 12409 non-null object
dtypes: float64(4), object(6)None
答案 0 :(得分:0)
以下对我有用,我改变的第一件事是axis
参数,它应该是axis=0
或删除,因为这是默认值。
然后我重置了索引并将其重命名为恢复&#39; HOUR&#39;列并执行了插值:
In [37]:
df = df.set_index('HOUR').reindex_axis([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23])
df.reset_index(inplace=True)
df.rename(columns={'index':'HOUR'}, inplace=True)
df['HOUR'] = df.HOUR.interpolate('linear')
df
Out[37]:
HOUR DET_SCN DATE MINUTE COUNT OCCUPANCY DET_FAULT CC_FAULT \
0 0 D11136 07/01/2014 0 0 0 False True
1 1 D11136 07/01/2014 0 0 0 False True
2 2 D11136 07/01/2014 0 0 0 False True
3 3 D11136 07/01/2014 0 0 0 False True
4 4 D11136 07/01/2014 0 0 0 False True
5 5 NaN NaN NaN NaN NaN NaN NaN
6 6 NaN NaN NaN NaN NaN NaN NaN
7 7 NaN NaN NaN NaN NaN NaN NaN
8 8 NaN NaN NaN NaN NaN NaN NaN
9 9 NaN NaN NaN NaN NaN NaN NaN
10 10 NaN NaN NaN NaN NaN NaN NaN
11 11 NaN NaN NaN NaN NaN NaN NaN
12 12 NaN NaN NaN NaN NaN NaN NaN
13 13 NaN NaN NaN NaN NaN NaN NaN
14 14 NaN NaN NaN NaN NaN NaN NaN
15 15 D11136 07/01/2014 0 0 0 False True
16 16 D11136 07/01/2014 0 0 0 False True
17 17 D11136 07/01/2014 0 0 0 False True
18 18 D11136 07/01/2014 0 0 0 False True
19 19 D11136 07/01/2014 0 0 0 False True
20 20 D11136 07/01/2014 0 0 0 False True
21 21 D11136 07/01/2014 0 0 0 False True
22 22 D11136 07/01/2014 0 0 0 False True
23 23 D11136 07/01/2014 0 0 0 False True
SUB_STAT
0 False
1 False
2 False
3 False
4 False
5 NaN
6 NaN
7 NaN
8 NaN
9 NaN
10 NaN
11 NaN
12 NaN
13 NaN
14 NaN
15 False
16 False
17 False
18 False
19 False
20 False
21 False
22 False
23 False