2017-07-19 183 views
2

我有一列DataFrame具有相同的列和不同的值。我想在大熊貓的一行中刪除DataFrames列表中的一些列。使用List Comprehension(Pandas)從DataFrame列表中刪除DataFrame的列

對於遠,我試過(dfs有數據幀列表)

dfs.drop([col for col in ['var1', 'var2'] if col in dfs], axis=1, inplace=True) 

dfs[dfs.drop([col for col in ['var1', 'var2'] if col in dfs], axis=1, inplace=True)] 

兩者都給予同樣的錯誤:

AttributeError: 'list' object has no attribute 'drop'

type(dfs) 
>> list 

然而,當我可以通過每個從DataFRame循環他列出dfs使用for循環,我可以刪除列。

我該如何在熊貓的列表理解方式中做到這一點?

+0

但'dfs'是列表,而不是一個數據框。 –

+2

列表理解不是解決這個問題的慣用方法。 –

+0

'dfs'是一個DataFrames列表 –

回答

5

假設您想要刪除['var1', 'var2']列,並且您的數據框具有相同的列,則應使用for循環。

for df in dfs: 
    df.drop(['var1', 'var2'], axis=1, inplace=True) 

或者,這個列表比較exp爲:

[df.drop(['var1', 'var2'], axis=1, inplace=True) for df in dfs] 

這將返回的None的List。你也可以使用此:

dfs = [df.drop(['var1', 'var2'], axis=1) for df in dfs] 

省略inplace=True會導致df.drop返回一個數據幀,而不是就地更新和返回無。我會推薦這個如果你正在使用列表comps。

最後,我強烈建議使用循環。

+0

這是否工作?循環不是循環遍歷(數據框的)列表副本而不是實際的列表本身? –

+1

@AdarshChavakula使用像數據框這樣的可變對象時,您直接使用引用,而不是副本。它確實有效。 –

+1

作爲練習,創建'df',然後將'df'分配給'df1'。嘗試在'df1'中刪除一個列,這個變化也反映在'df'中。 –

相關問題