【问题标题】:Slicing dataframe caught error "TypeError: tuple indices must be integers or slices, not str"切片数据帧捕获错误“TypeError:元组索引必须是整数或切片,而不是 str”
【发布时间】:2020-09-14 03:18:56
【问题描述】:

我想根据Data 值对df 进行切片以形成df1

df:

           Id   Timestamp               Data
106272  106273  2013-09-10 16:40:40.467 86.0
106273  106274  2013-09-10 16:40:41.267 86.0
106274  106275  2013-09-10 16:40:42.053 59.0
106275  106276  2013-09-10 16:40:42.857 52.0
106278  106279  2013-09-10 16:41:00.173 61.5

然后,如果 Data 在 [20, 100] 范围内,则我对 df 进行切片,代码:

df_copy = df.copy()
df1 = df_copy[(df_copy["Data"]>=20) & (df_copy["Data"]<=100)]

这很好用。

然后我想将dfdf1 分组为dateTimestamp

import datetime
df['Date'] = [datetime.datetime.date(d) for d in df['Timestamp']]

x = pd.DataFrame(df.groupby(['Date']).size())
x.columns = ['values']

# -----------------------------------

df1['Date'] = [datetime.datetime.date(d) for d in df1['Timestamp']]

x1 = pd.DataFrame(df1.groupby(['Date']).size())
x1.columns = ['values']

但是,它仅适用于 df,但在 df1 时出现错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-15-2ddde01b3d65> in <module>

---> 12 df1['Date'] = [datetime.datetime.date(d) for d in df1['Timestamp']]
     13 
     14 x1 = pd.DataFrame(df1.groupby(['Date']).size())

TypeError: tuple indices must be integers or slices, not str

为什么?

【问题讨论】:

    标签: python pandas dataframe tuples


    【解决方案1】:

    不需要带有 lsit 理解和 DataFrame 构造函数的新列,将 Series.dt.dateSeries.to_frame 一起使用:

    x = (df.groupby(df['Timestamp'].dt.date)
           .size()
           .to_frame('values'))
    
    
    df1 = df[(df["Data"]>=20) & (df["Data"]<=100)].copy()
    
    x1 = (df1.groupby(df1['Timestamp'].dt.date)
             .size()
             .to_frame('values'))
    

    【讨论】:

    • 谢谢。您介意简要说明此错误的原因吗?
    • @nilsinelabore - 经过测试,没有错误,无法模拟。
    猜你喜欢
    • 2017-03-11
    • 2019-11-23
    • 2018-12-29
    • 2018-03-12
    • 2021-01-18
    • 2021-09-08
    • 1970-01-01
    • 2015-12-09
    • 2019-02-05
    相关资源
    最近更新 更多