首页 文章

我在列中丢失了我的值

提问于
浏览 585
2

我用pandas组织了我的数据 . 我把我的程序填写如下

import pandas as pd
import numpy as np
df1 = pd.read_table(r'E:\빅데이터 캠퍼스\골목상권 프로파일링 - 서울 열린데이터 광장 3.초기-16년5월분1\17.상권-추정매출\201301-201605\tbsm_trdar_selng.txt\tbsm_trdar_selng_utf8.txt' , sep='|' ,header=None
,dtype = { '0' : pd.np.int})

df1 = df1.replace('201301', int(201301))

df2 = df1[[0 ,1, 2, 3 ,4, 11,12 ,82 ]]

df2_rename = df2.columns = ['STDR_YM_CD', 'TRDAR_CD', 'TRDAR_CD_NM', 'SVC_INDUTY_CD', 'SVC_INDUTY_CD_NM', 'THSMON_SELNG_AMT', 'THSMON_SELNG_CO', 'STOR_CO'  ]

print(df2.head(40)) 

df3_groupby = df2.groupby(['STDR_YM_CD', 'TRDAR_CD' ])
df4_agg = df3_groupby.agg(np.sum)

print(df4_agg.head(30))

当我打印df2时,我可以在TRDAR_CD列中看到11947和11948值 . 如下图

enter image description here

之后,我使用了groupby函数,在TRDAR_CD列中丢失了11948值 . 您可以在下面的图片中看到这种情况

enter image description here

可能,这个问题来自警告信息??警告消息是'sys:1:DtypeWarning:Columns(0)具有混合类型 . 在导入时指定dtype选项或设置low_memory = False .

帮我PLZ

print(df2.info())是

RangeIndex:1089023个条目,0到1089022

数据列(共8列):

STDR_YM_CD 1089023非空对象

TRDAR_CD 1089023非null int64

TRDAR_CD_NM 1085428非空对象

SVC_INDUTY_CD 1089023非空对象

SVC_INDUTY_CD_NM 1089023非空对象

THSMON_SELNG_AMT 1089023非null int64

THSMON_SELNG_CO 1089023非null int64

STOR_CO 1089023非null int64

dtypes:int64(4),object(4)

内存使用量:66.5 MB

没有

1 回答

  • 2

    MultiIndex被称为第一列和第二列,如果第一级默认重复,则'sparsified'索引的较高级别使控制台输出更容易一些 .

    通过将display.multi_sparse设置为 False ,可以在 MultiIndex 的第一级显示数据 .

    样品:

    df = pd.DataFrame({'A':[1,1,3],
                       'B':[4,5,6],
                       'C':[7,8,9]})
    
    df.set_index(['A','B'], inplace=True)
    
    print (df)
         C
    A B   
    1 4  7
      5  8
    3 6  9
    
    #temporary set multi_sparse to False
    #http://pandas.pydata.org/pandas-docs/stable/options.html#getting-and-setting-options
    with pd.option_context('display.multi_sparse', False):
        print (df)
         C
    A B   
    1 4  7
    1 5  8
    3 6  9
    

    编辑问题编辑:

    我认为问题是值的类型 11948string ,所以省略了 .

    EDIT1按档案:

    您可以通过在read_csv中添加参数 usecols 然后按GroupBy.sum进行聚合来简化解决方案:

    import pandas as pd
    import numpy as np
    
    df2 = pd.read_table(r'tbsm_trdar_selng_utf8.txt' , 
                        sep='|' ,
                        header=None ,
                        usecols=[0 ,1, 2, 3 ,4, 11,12 ,82],
                        names=['STDR_YM_CD', 'TRDAR_CD', 'TRDAR_CD_NM', 'SVC_INDUTY_CD', 'SVC_INDUTY_CD_NM', 'THSMON_SELNG_AMT', 'THSMON_SELNG_CO', 'STOR_CO'],
                        dtype = { '0' : int})
    
    
    df4_agg = df2.groupby(['STDR_YM_CD', 'TRDAR_CD' ]).sum()
    print(df4_agg.head(10))
                         THSMON_SELNG_AMT  THSMON_SELNG_CO  STOR_CO
    STDR_YM_CD TRDAR_CD                                            
    201301     11947           1966588856            74798       73
               11948           3404215104            89064      116
               11949           1078973946            42005       45
               11950           1759827974            93245       71
               11953            779024380            21042       84
               11954           2367130386            94033      128
               11956            511840921            23340       33
               11957            329738651            15531       50
               11958           1255880439            42774      118
               11962           1837895919            66692       68
    

相关问题