熊猫:重新索引并插入非连续数据

时间:2014-09-15 10:39:22

标签: python pandas data-cleansing

我有一个数据集安排在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

1 个答案:

答案 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