2015-10-13 49 views
2

我有一个dataset ,温度为一列。由于加热器的工作原理,数据中存在一些缺陷。为了直接比较不同的数据集,我想填写这些缺失的温度,并在另一列中添加相应的NaN。通过重新索引将行插入数据框

我试过使用这里给出的答案,这似乎正是我想要的:link。 但是,这并不工作 - 我得到了新的温度值,我希望有一个数据帧,但相应的数据已经:

import pandas as pd 
import numpy as np   
A1 = pd.read_table('Test data.tsv', encoding='ISO-8859-1', header = 2) 
A1.columns = ['time',2,3,4,5,6,7,'freq',9,10,11,12,13,'temp',15,16,17,18,19] 
A1truncated = A1[A1.temp >= 25]; A1truncated=A1truncated[A1truncated.temp <= 350.1] 
A1averaged = A1truncated.groupby(['temp'], as_index=False)['freq'].mean() 
A1averaged = np.around(A1averaged, decimals=1) 

A1averaged.set_index('temp') 
new_index = pd.Index(np.arange(25, 350, 0.1), name='temp') 
A1indexed = A1averaged.set_index('temp').reindex(new_index).reset_index() 

打开我的19列到1温度指数( A1averaged),然后分成2列,新的温度列表和一列空数据(A1索引)。 任何想法为什么这不起作用?或另一种方法来做同样的事情?

回答

1

带浮点的索引可以带有问题reindex,不一致可能是由于浮点精度。所以我使用一点破解 - Int64Index而不是Float64Index

我尝试设置的子集更简单的方法:

A1truncated = A1[(A1.temp >= 25) & (A1.temp <= 350.1)] 

则省略第一套指标,因为设置了两次:

A1averaged.set_index('temp') 

设置new_indexInt64Index

new_index = pd.Index(np.arange(250, 3500), name='temp') 

和使用Int64Index将列temp乘以10,最后一列除以10

A1averaged['temp'] = A1averaged['temp'] * 10 
A1indexed['temp'] = A1indexed['temp']/10 

一起:

import pandas as pd 
import numpy as np   
A1 = pd.read_table('Test data.tsv', encoding='ISO-8859-1', header = 2) 

A1.columns = ['time',2,3,4,5,6,7,'freq',9,10,11,12,13,'temp',15,16,17,18,19] 

A1truncated = A1[(A1.temp >= 25) & (A1.temp <= 350.1)] 

A1averaged = A1truncated.groupby(['temp'], as_index=False)['freq'].mean() 
A1averaged = np.around(A1averaged, decimals=1) 
new_index = pd.Index(np.arange(250, 3500), name='temp') 

A1averaged['temp'] = A1averaged['temp'] * 10 
A1indexed = A1averaged.set_index('temp').reindex(new_index).reset_index() 
A1indexed['temp'] = A1indexed['temp']/10 
print A1indexed.tail() 
#  temp  freq 
#3245 349.5 5830065.6 
#3246 349.6 5830043.5 
#3247 349.7 5830046.3 
#3248 349.8 5830025.3 
#3249 349.9 5830015.6 
+0

完美,非常感谢!我永远不会注意到浮动问题 – Yobmod

相关问题