【发布时间】:2016-04-06 13:59:22
【问题描述】:
我有一个由 5 个递减序列(每个 290 行)组成的数据框,其值介于 0 和 1 之间。
数据如下:
A B C D E
0.60 0.998494 1.0 1.0 1.0 1.0
0.65 0.997792 1.0 1.0 1.0 1.0
0.70 0.996860 1.0 1.0 1.0 1.0
0.75 0.995359 1.0 1.0 1.0 1.0
0.80 0.992870 1.0 1.0 1.0 1.0
我想重新索引数据框,以便每行之间有 0.01 的增量。我试过pd.DataFrame.reindex,但无济于事:它返回一个数据框,其中大部分值为np.NaN
import pandas as pd
df = pd.read_csv('http://pastebin.com/raw/yeHdk2Gq', index_col=0)
print df.reindex(np.arange(0.6, 3.5, 0.025)).head()
仅返回两个有效行,并将其他 288 行转换为 NaN:
A B C D E
0.600 0.998494 1.0 1.0 1.0 1.0
0.625 NaN NaN NaN NaN NaN
0.650 0.997792 1.0 1.0 1.0 1.0
0.675 NaN NaN NaN NaN NaN
0.700 NaN NaN NaN NaN NaN ##This row existed before reindexing
Pandas 无法将新索引与初始值匹配,尽管似乎不存在舍入问题(初始索引不超过 2 位小数)。
这似乎与我的数据有关,因为以下工作按预期工作:
df = pd.DataFrame(np.random.randn(10,3), columns=['A', 'B', 'C'])\
.reindex(np.arange(1, 10, 0.5))
print df.head()
这给出了:
A B C
1.0 0.206539 0.346656 2.578709
1.5 NaN NaN NaN
2.0 1.164226 2.693394 1.183696
2.5 NaN NaN NaN
3.0 -0.532072 -1.044149 0.818853
感谢您的帮助!
【问题讨论】:
-
IIUC 那么你可以拨打
df.apply(pd.Series.interpolate) -
当然这是我的意图,但我无法重新索引我的数据框:应用
pd.DataFrame.reindex会擦除初始值(参见第三个代码块,第 0.70 行) -
你能检查一下 0.70 是不是真正的值,可能有某种浮点不精确
-
就是这样。打印 np.arange 不会显示小数点。感谢您的帮助