【问题标题】:Reshape dataframe while avoiding memory error在避免内存错误的同时重塑数据帧
【发布时间】:2018-12-29 04:47:05
【问题描述】:

我想将一个大型数据框从 df1 格式重塑为 df2::

我之前在这篇文章中问过这个问题:

Reshape and filter pandas dataframe

并收到了 3 种建议的方法,它们都适用于下面的最小示例,但是在实际数据帧上使用时都会导致内存错误。

dict1 = [{'12/21/18': 0,'12/22/18': 0,'12/23/18': 1,'12/24/18': 1},
 {'12/21/18': 1,'12/22/18': 1,'12/23/18': 0,'12/24/18': 1},
 {'12/21/18': 0,'12/22/18': 1,'12/23/18': 0,'12/24/18': 0},
 {'12/21/18': 1,'12/22/18': 0,'12/23/18': 1,'12/24/18': 1}]


df1 = pd.DataFrame(dict1, index= ['AAPL','CSCO','GE','MSFT' ])

dict2 = [{'Ticker': 'AAPL','Date': '12/23/18'},
 {'Ticker': 'AAPL','Date': '12/24/18'},
 {'Ticker': 'CSCO','Date': '12/22/18'},
 {'Ticker': 'CSCO','Date': '12/24/18'},
 {'Ticker': 'GE',  'Date': '12/22/18'},
 {'Ticker': 'MSFT','Date': '12/24/18'}]


df2 = pd.DataFrame(dict2) 

例如,这确实适用于小例子:

df1.index.name = 'Ticker' 
df2 = df1.reset_index().melt(id_vars='Ticker',var_name='Date') 

df2 = df2[df2.value == 1].set_index('Ticker').filter(['Date','Ticker']).sort_index()

谁能建议我如何避免内存错误?有没有办法以更小的块运行整个事情并将它们保存在两者之间以避免这种情况?

【问题讨论】:

    标签: python dataframe reshape


    【解决方案1】:

    我不确定你是否尝试过stack

    import pandas as pd
    
    dict1 = [{'12/21/18': 0,'12/22/18': 0,'12/23/18': 1,'12/24/18': 1},
     {'12/21/18': 1,'12/22/18': 1,'12/23/18': 0,'12/24/18': 1},
     {'12/21/18': 0,'12/22/18': 1,'12/23/18': 0,'12/24/18': 0},
     {'12/21/18': 1,'12/22/18': 0,'12/23/18': 1,'12/24/18': 1}]
    
    df1 = pd.DataFrame(dict1, index= ['AAPL','CSCO','GE','MSFT'])
    df1.index.name = 'Ticker'
    
    df3 = df1.stack()
    df3 = df3[df3 == 1].reset_index(level=1)
    df3.rename(columns={'level_1': 'Date'})[['Date']]
    

    【讨论】:

    • 它只适用于小例子,对于较大的例子,我也会遇到内存错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多