2017-08-15 4 views
0

3つの列にわたって単純な平均操作を実行しています。私は毎月のデータを四半期平均に変換しています。私はここでPythonを使用した単純な平均操作でカーネルが動作しない

2000.q1 
20 

にそれを変換したい

2000.1 2000.2 2000.3.... 
18  15  27 

は、私がこれまで持っているものです::

デフconvert_housing_data_to_quarters(): '' '住宅を変換したデータは次のようになりますデータを四半期に分割し、データフレームに平均値 を返します。このデータフレームは2000q1〜2016q3の カラムのデータフレームである必要があり、["State"、 "RegionName"]の形のマルチインデックス を持つ必要があります。

Note: Quarters are defined in the assignment description, they are 
not arbitrary three month periods. 
The resulting dataframe should have 67 columns, and 10,730 rows. 
''' 
# read in the zillow housing data 
zillow_df = pd.read_csv('City_Zhvi_AllHomes.csv') 
print(zillow_df.iloc[1,1]) 
print(len(zillow_df)) 
# slice from 2000q1 to 2016q3 
print(zillow_df.columns) 
print(zillow_df.columns[6:51]) 
zillow_df.drop(zillow_df.columns[6:51],axis=1,inplace=True) 
# generate quarterly average 
y = 2000 
q = 1 
for i in range(67): 
    y_q = str(y)+'q'+str(q) 
    #print(y_q) 
    print(zillow_df.columns[6+(i)*3]) 
    print(zillow_df[zillow_df.columns[6+(i)*3]]) 
    zillow_df[y_q]=(zillow_df[zillow_df.columns[6+(i)*3]]+zillow_df[zillow_df.columns[6+1+(i)*3]]+zillow_df[zillow_df.columns[6+2+(i)*3]])/3 
    q=q+1 
    if q==5: 
     q=1 
     y=y+1 
return zillow_df.head() 

私のコードは正しいと思いますが、毎回ipythonノートブックで実行します。それは、カーネルが死んだと言う。なぜ私は分からない。

答えて

0

最初にto_datetimeを変換してからmonth periodに変換してto_periodにする必要があると思います。

resamplequartersであり、集約meanaxis=1は列名によって集計する)です。

最終形式で文字列にstrftimeで列を変換します

df.columns = pd.to_datetime(df.columns, format='%Y.%m').to_period('m') 
print (df) 
    2000-01 2000-02 2000-03 
0  18  15  27 

df = df.resample('Q', axis=1).mean() 
df.columns = df.columns.strftime('%Y.q%q') 
print (df) 
    2000.q1 
0  20 
+0

この変更が必要であり、どのようなカーネルが死ぬことを引き起こしなぜあなたは説明してもらえます。 –

+0

難しい質問ですが、最も単純な答えは、パンダのループを使用することは最適化されておらず、実際には遅いです。それで、記憶を使い果たしてしまうかもしれない?多分問題のあるデータですか?多分もっと大きなデータですか?しかし、最善の方法は、 'resample'のようなベクトル化されたソリューションを使用することです。 – jezrael

関連する問題