2017-02-17 46 views
0

.matファイルをpandas DataFrameに変換しようとしていますが、.matファイルの構造によって解読が困難になっています。現在、DataFrameは次のようになりますpandas内のネストされた配列を削除するDataFrame

      A 
2008-01-02    [1] 
2008-01-03    [2] 
2008-01-04    [3] 
2008-01-07    [4] 
2008-01-08    [5] 

各列に含まれる値は、それぞれの配列に含まれているようですね。 .dtypeはオブジェクトを返す。私は最終的に私の列を集計したいが、数値ではないので数値関数呼び出しを行うことができません。 DataFrame構造体を保持したまま配列構造体から値を削除する方法についてのアイデアはありますか?

答えて

0

applyメソッドを使用すると、データフレームの列に対して操作を適用できます。

objectのタイプに応じて、functionを定義してapplyメソッドに渡す必要があります。たとえば、リストの場合は最初の項目を選択し、文字列の場合は数値を抽出して変換することができます。

0

は、このゼロのインデックス列を削除する方法がわからない

df = pd.DataFrame(data) 
unnested_lst = [] 
for col in df.columns: 
    unnested_lst.append(df[col].apply(pd.Series).stack()) 
result = pd.concat(unnested_lst, axis=1, keys=df.columns) 
result 
          A 
2008-01-02  0   1 
2008-01-03  0   2 
2008-01-04  0   3 
2008-01-07  0   4 
2008-01-08  0   5 

を動作しているようです。何か案は?

1

私が正しく理解している場合、各エントリはPythonリストに含まれている要素であり、リストから要素を取り出して各エントリがスカラーになるようにしたいとします。

これを行う方法は、df.applymapの機能です。あなただけの列のいくつかの変換を実行したい場合は、代わりにseries.mapを使用することができ

df = df.applymap(lambda x: x[0]) # If same operation is to be used on all columns 

この機能は、全体のデータフレーム上で動作することに注意してください:

for some columns: 
    df['column name'] = df['column name'].map(lambda x: x[0]) 

をどちらの場合も、あなたが持っていること後でカラムのdtypeを変更してそれらのカラムを処理することができます。リストから単一の要素に変更すると、列のobject dtypeが保持されることがあります。この場合、次のように使用できます。

df['column name'] = df['column name'].astype([new type]) 
+0

これは私が探していたものです。ありがとう! –

関連する問題