在pandas数据框中附加问题的时间序列

时间:2016-02-20 07:07:22

标签: python python-2.7 pandas dataframe time-series

我正在研究时间序列,我在pandas数据框中发现了非常特殊的行为

以下代码在索引不是时间序列时有效

import pandas as pd
df = pd.DataFrame({"a":[1,2,3], "b":[31,41,51],"c":[31,52,23]}, index=["z", "y", "x"])
df1 = pd.DataFrame({"a":[41,55,16]}, index=["w", "v", "u"])
df2 = pd.DataFrame({"b":[24,3,57]}, index=["w", "v", "u"])
df3 = pd.DataFrame({"c":[111,153,123]}, index=["w", "v", "u"]) 
df = df.append(df1)
dfx.ix[df2.index, "b"] = df2

df的输出:

    a   b   c
z   1  31  31
y   2  41  52
x   3  51  23
w  41  24 NaN
v  55   3 NaN
u  16  57 NaN

但是,当datetime64[ns]索引或大小过大时,这不起作用

此外,以下命令有效,当有datetime64[ns]索引

df = df.append(df1)
df["b"][df2.index] = df2

为什么会这样?

1 个答案:

答案 0 :(得分:1)

您可以尝试fillna

df = df.append(df1)
print df.fillna(df2)
    a   b   c
z   1  31  31
y   2  41  52
x   3  51  23
w  41  24 NaN
v  55   3 NaN
u  16  57 NaN

我用Datatimeindex测试它并且效果很好:

import pandas as pd

df = pd.DataFrame({"a":[1,2,3], "b":[31,41,51],"c":[31,52,23]}, index=["z", "y", "x"])
df.index = pd.date_range('20160101',periods=3,freq='T')

df1 = pd.DataFrame({"a":[41,55,16]}, index=["w", "v", "u"])
df1.index = pd.date_range('20160104',periods=3,freq='T')

df2 = pd.DataFrame({"b":[24,3,57]}, index=["w", "v", "u"])
df2.index = pd.date_range('20160104',periods=3,freq='T')

df3 = pd.DataFrame({"c":[111,153,123]}, index=["w", "v", "u"])
df3.index = pd.date_range('20160104',periods=3,freq='T')
df = df.append(df1)
print df
                      a   b   c
2016-01-01 00:00:00   1  31  31
2016-01-01 00:01:00   2  41  52
2016-01-01 00:02:00   3  51  23
2016-01-04 00:00:00  41 NaN NaN
2016-01-04 00:01:00  55 NaN NaN
2016-01-04 00:02:00  16 NaN NaN

print df.fillna(df2)
                      a   b   c
2016-01-01 00:00:00   1  31  31
2016-01-01 00:01:00   2  41  52
2016-01-01 00:02:00   3  51  23
2016-01-04 00:00:00  41  24 NaN
2016-01-04 00:01:00  55   3 NaN
2016-01-04 00:02:00  16  57 NaN

df.ix[df2.index, "b"] = df2
print df
                      a   b   c
2016-01-01 00:00:00   1  31  31
2016-01-01 00:01:00   2  41  52
2016-01-01 00:02:00   3  51  23
2016-01-04 00:00:00  41  24 NaN
2016-01-04 00:01:00  55   3 NaN
2016-01-04 00:02:00  16  57 NaN