2016-02-20 6 views
1

я работал на временных рядах, я нашел очень своеобразное поведение в панд кадра данныхвременных рядов с добавлением вопроса в панд кадре данных

Следующий код работает, когда индекс не временные ряды

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

Вы можете попробовать 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 
+0

Он очень хорошо работает с 'панд: 0.17.1' , Что такое версия 'pandas'? Проверьте его 'print pd.show_versions()'. Следующая проблема может быть, если ваша память мала и 'df' слишком велик. – jezrael

Смежные вопросы