2016-03-31 9 views
1

私は大きなデータフレームを持っており、別のデータフレームから連結しています。パンダのマルチインデックスの削除/修復

これは、異なるデータ型の時系列から構築されており、このようになりますされています

location      locname1      locname2 
region       region1      region1 
HZB        314732      309906 
LatLon       xx;yy      xx;yy 
1940-01-01       NaN       NaN 
1940-02-01       NaN       NaN 
1940-03-01       NaN       NaN 
1940-04-01       NaN       NaN 
1940-05-01       NaN       NaN 

しかし、私はで始まるデータフレームの一部はまた、迷子のようです彼らのインデックスにdatatype行を持って、ときに私それらを連結する。

これは本当にパンダのマルチインデックスを理解していない私に向かって指して明らかず、と私は、完全に私を混乱させる何私が使用していると私は直感的にそれらをどのように扱うかは全く異なる扱いインデックスをパンダ事実を認めるが、私の理解が十分でいるようです私がしなければならないことのために。

大部分は、そうです。私がデータフレーム全体をプロットしようとすると、私はKeyError: 'Key length (5) was greater than MultiIndex lexsort depth (0)'になります。

エラーを探していますが、私はfindvarious "solutions"です。これらはすべて日付の列に影響しますが、インデックスの行は無視されます。

マルチインデックスの周りに頭を浮かべるだけでなく、df.get_rid_of_my_multiindex()のようなものがありますか?マルチインデックスを削除したり、これをnumber 1 2 3 …などのように置き換えることができますか?

答えて

0

私は1つの可能な解決策は、列のMultiindexdroplevelのだと思う:

print df 
    location locname1 locname2 
     region region1 region1 
      HZB 314732 309906 
     LatLon xx;yy xx;yy 
0 1940-01-01  NaN  NaN 
1 1940-02-01  NaN  NaN 
2 1940-03-01  NaN  NaN 
3 1940-04-01  NaN  NaN 
4 1940-05-01  NaN  NaN 

df.columns = df.columns.droplevel([1,2,3]) 
print df 
    location locname1 locname2 
0 1940-01-01  NaN  NaN 
1 1940-02-01  NaN  NaN 
2 1940-03-01  NaN  NaN 
3 1940-04-01  NaN  NaN 
4 1940-05-01  NaN  NaN 

あなたが列名をリセットするだけで必要な場合はrangeshapeを使用します。

df.columns = range(df.shape[1]) 
print df 
      0 1 2 
0 1940-01-01 NaN NaN 
1 1940-02-01 NaN NaN 
2 1940-03-01 NaN NaN 
3 1940-04-01 NaN NaN 
4 1940-05-01 NaN NaN 
+0

そしてパンダ、それらのものの別の1私が探している機能を正確に持っていますが、見つけられません。また、 'df.columns = df.columns.droplevel([1,2,3])'の亜種は特に便利です。私の 'location'を保持してください。これは素晴らしい、ユニークな識別子ですプロットのためにier。ありがとうございました! –

関連する問題