Pandas数据帧输出格式

时间:2016-10-17 04:21:30

标签: python pandas format export-to-csv

我导入交易清单并尝试将其合并到具有总计数量和平均价格的仓位文件中。我根据(自动收报机,类型,到期和罢工)进行分组。两个问题:

  1. 输出在第一列中具有索引组(自动收报机,类型,到期和警示)。如何更改此值以使每个索引列输出到其自己的列,以便输出csv的格式与输入数据的格式相同?
  2. 我目前强制股票交易具有价值(" 1"),因为将单元格留空将导致错误,但这会增加错误数据,因为" 1"没有意义。有没有办法保存""没有造成问题?
  3. 数据帧:

        GM      stock   1           1       32      100
        AAPL    call    201612      120     3.5     1000
        AAPL    call    201612      120     3.25    1000
        AAPL    call    201611      120     2.5     2000
        AAPL    put     201612      115     2.5     500
        AAPL    stock   1            1      117     100
    

    代码:

        import pandas as pd
        import numpy as np
    
        df = pd.read_csv(input_file, index_col=['ticker', 'type', 'expiration', 'strike'], names=['ticker', 'type', 'expiration', 'strike', 'price', 'quantity'])
        df_output = df.groupy(df.index).agg({'price':np.mean, 'quantity':np.sum})
        df_output.to_csv(output_file, sep=',')
    

    csv输出以这种格式出现:

    (ticker, type, expiration, strike), price, quantity
    

    所需格式:

    ticker, type, expiration, strike, price, quantity
    

1 个答案:

答案 0 :(得分:0)

对于第一个问题,你应该使用groupby(df.index_col)而不是groupby(df.index)

对于第二种,我不确定为什么你不能保留"",这是数字吗?

我模拟了下面的一些数据:

import pandas as pd                                                                                                 
import numpy as np                                                                                                  

d = [                                                                                                               
    {'ticker':'A', 'type':'M', 'strike':'','price':32},                                                             
    {'ticker':'B', 'type':'F', 'strike':100,'price':3.5},                                                           
    {'ticker':'C', 'type':'F', 'strike':'', 'price':2.5}                                                            

]                                                                                                                   
df = pd.DataFrame(d)                                                                                                
print df                                                                                                            

#dgroup = df.groupby(['ticker', 'type']).agg({'price':np.mean})                                                     
df.index_col = ['ticker', 'type', 'strike']                                                                         
dgroup = df.groupby(df.index_col).agg({'price':np.mean})   
#dgroup = df.groupby(df.index).agg({'price':np.mean})                                                 
print dgroup                                                                                                        
print type(dgroup)                                                                                                  
dgroup.to_csv('check.csv') 
在check.csv输出

ticker,type,strike,price                                                                                            
A,M,,32.0                                                                                                           
B,F,100,3.5                                                                                                         
C,F,,2.5