【问题标题】:ValueError: You are trying to merge on datetime64[ns] and object columns. If you wish to proceed you should use pd.concatValueError:您正在尝试合并 datetime64[ns] 和对象列。如果你想继续,你应该使用 pd.concat
【发布时间】:2018-08-31 04:59:27
【问题描述】:

我想制作一个数据透视表并填写日期。我编写了代码。

user_dct ={100:"Tom",101:"Jon",102:"Daisy"}
for key,value in user_dct.items():
         file= './'+value+'.csv'
       df = pd.read_csv(file)

每个df是

    Date        ID        Name    Score        Rank
0    2011-01-12  100     Tom        40            C
1    2011-01-14  100     Tom        60            B
2    2011-01-19  100     Tom        80            A
・
・
・


   Date        ID        Name    Score        Rank
0    2011-01-12  101     Jon        30            C
1    2011-01-14  101     Jon        50            C
2    2011-01-19  101     Jon        60            B
・
・
・

user_dct ={100:"Tom",101:"Jon",102:"Daisy"}
dfs = []
for key,value in user_dct.items():
    file= './'+value+'.csv'
    dfs.append(pd.read_csv(file, parse_dates=['Date']))

df = pd.concat(dfs, ignore_index=True)
df =df.sort_values(['Date','ID']).set_index(['Date','ID'])

date_df = pd.DataFrame({'Date':pd.date_range('2011-01-01','2011-12-31',freq='1D').strftime('%Y-%m-%d')})
df = pd.merge(df, date_df, on='Date', how='outer').fillna(0)

我的理想输出是

                        Name    Score        Rank
    Date      ID  
2011-01-01  100         Tom       0              0
                    101         Jon        0              0
                    102     Daisy       0              0  
                    ・
                                         ・
                                         ・
2011-01-12  100         Tom       40            C
                    101         Jon        30            C
                    102     Daisy       90            S
2011-01-14  100     Tom         60            B
                    101     Jon           50            C
                     102     Daisy       90            S
2011-01-19  100     Tom         80            A
                     101     Jon          60            B
                     102     Daisy      80            A
・
・
・

我的代码有什么问题?我应该如何解决这个问题?为什么会发生 int 类型错误?我更改了 sort_values&set_index ,但错误并没有消失。

【问题讨论】:

  • 如果删除 .strftime('%Y-%m-%d') 会有什么效果?
  • @jezrael 我删除了它,但同样的错误发生了。
  • print (df.dtypes) 是什么?
  • @jezrael Series([], dtype: object) 被打印出来
  • 下面发布的工作解决方案如何?

标签: python pandas


【解决方案1】:

我认为,你需要:

idx = pd.date_range('2011-01-01','2011-12-31')
mux = pd.MultiIndex.from_product([idx, df['ID'].unique()], names=['Date','ID'])
df = df.set_index(['Date','ID']).reindex(mux, fill_value=0)
print (df.head())
               Name  Score Rank
Date       ID                  
2011-01-01 100    0      0    0
           101    0      0    0
2011-01-02 100    0      0    0
           101    0      0    0
2011-01-03 100    0      0    0

【讨论】:

  • 感谢您的回答。当我运行您的代码时,输​​出与您的相同。所以我写了我的问题,我想制作具有日期和 ID 索引的数据透视表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-07
  • 2015-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-02
  • 2010-11-03
相关资源
最近更新 更多