2017-01-07 6 views
0

複数のデータフレームを持ち、それぞれが同じ列名を持っているとしますが、これらの列の内容は必ずしも同じではありません。複数のパンダのデータフレームに表示される名前で列をドロップする

各データフレームの列をループして名前で列を削除しようとしましたが、これは機能しませんでした。私は個別に各データフレーム上で同じメソッドをしようとした場合、それは

に動作します私は、次のデータフレームを持っている:

import pandas as pd 
df1 = pd.DataFrame({'user': ['John', 'Joe', 'Alice'], 
        'income': [40000, 50000, 42000], 
        'Unnamed: 0': [1, 2, 3]}) 
df2 = pd.DataFrame({'user': ['Luke', 'Paul', 'Jane'], 
        'income': [40000, 50000, 42000], 
        'Unnamed: 0': [1, 2, 3]}) 

df3 = pd.DataFrame({'user': ['Sue', 'Haley', 'Erica'], 
        'income': [40000, 50000, 42000], 
        'Unnamed: 0': [1, 2, 3]}) 

私は成功せず、これを試してみました:

dataframes = [df1, df2, df3] 
for df in dataframes: 
    for column in df.columns: 
     if "Unnamed" in column: 
      df = df.drop(column, axis = 1) 

これは、のいずれかを変更しませんでしたdataframesの商品です。

しかし、私が言う場合:

df3 = df3.drop("Unnamed: 0", axis = 1)

それを返します:

pd.DataFrame({'user': ['Sue', 'Haley', 'Erica'], 
        'income': [40000, 50000, 42000]}) 

注、これはまた、DF1とDF2、DF3だけではないために動作します。

リスト内のすべてのデータフレームから不要な列を1行ずつ書き込まずに削除できますか?

答えて

4

はこれを試してみてください。

for df in dataframes: 
    for column in df.columns: 
     if "Unnamed" in column: 
      df.drop(column, axis = 1, inplace=True) 

問題は、私たちは第二(ネスト)ループを取り除くことができると思いますが、新しいデータフレームを作成し、すぐに

+4

を捨てたdfに割り当てられたということです。 ' df.drop(df.columns [df.columns.str.contains( '無名:')]、1、inplace = True) ' – MaxU

+0

@tato完璧!したがって、 'inplace = True'は' dataframes'の各対応する項目の代わりに 'df'を暗黙的に返しています – spies006

+0

正確には、@berrypy、inplace = Trueは各ループ反復でdfが指し示すDataFrameオブジェクトを修正していますオリジナルのデータフレーム)を作成する代わりに、新しい – tato

関連する問題