【问题标题】:How to sum an object column in python如何在python中对对象列求和
【发布时间】:2020-12-14 01:24:44
【问题描述】:

我有一个以 Pandas 对象表示的数据集,见下文:

    datetime    season  holiday workingday  weather temp    atemp   humidity    windspeed   casual  registered  count
1/1/2011 0:00        1      0         0         1   9.84    14.395        81       0           3     13          16
1/1/2011 1:00        1      0          0        2   9.02    13.635        80       0           8    32           40
1/1/2011 2:00         1     0          0        3   9.02    13.635        80       0           5    27           32

p_type_1 = pd.read_csv("Bike Share Demand.csv")

p_type_1 = (p_type_1 >> 
            rename(date = X.datetime))

p_type_1.date.str.split(expand=True,)
p_type_1[['Date','Hour']] = p_type_1.date.str.split(" ",expand=True,)

p_type_1['date'] = pd.to_datetime(p_type_1['date'])

p_hour = p_type_1["Hour"]
p_hour

现在我正在尝试获取我创建的列 Hour 的总和 (p_hour)

p_hours = p_type_1["Hour"].sum()
p_hours

并得到这个错误: TypeError: 必须是 str,而不是 int

然后我尝试了:

p_hours = p_type_1(str["Hour"].sum())
p_hours

并得到这个错误: TypeError: 'type' 对象不可下标

我只想要总和,什么给出。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您的数据框数据类型有问题。 仔细看看这个问题: Convert DataFrame column type from string to datetime, dd/mm/yyyy format

    应该是解决您问题的示例代码,我简化了 CSV

    '''
    CSV
    
    datetime,season
    1/1/2011 0:00,1
    1/1/2011 1:00,1
    1/1/2011 2:00,1
    
    '''
    
    import pandas as pd
    
    p_type_1 = pd.read_csv("Bike Share Demand.csv")
    p_type_1['datetime'] = p_type_1['datetime'].astype('datetime64[ns]')
    p_type_1['hour'] = [val.hour for i, val in p_type_1['datetime'].iteritems()]
    print(p_type_1['hour'].sum())
    

    【讨论】:

      【解决方案2】:

      这里发生了很多不正确的事情。所以我会尝试分解问题并提供替代方案。

      这里:

      p_hours = p_type_1(str["Hour"].sum())
      p_hours
      

      您的问题是,您实际上是在尝试这样做:

      p_hours = p_type_1([str("Hour")].sum())
      p_hours
      

      您的代码没有这样做,而是从技术上要求字符串类型中名为“Hour”的属性。这不是你想要做的。此崩溃与您的核心问题无关,只是语法错误。

      这里的问题实际上是,您的数据框列在同一列中混合了字符串和整数类型。求和操作将连接字符串,或求和数字类型。在混合类型中,它会失败。

      为了验证这是否是问题所在,我们需要查看您的实际数据框,因为我感觉您提供的数据框可能不正确。

      作为概念证明,我创建了以下示例:

      import pandas as pd
      dta = [str(x) for x in range(20)]
      dta.append(12)
      frame = pd.DataFrame.from_dict({
          "data": dta})
      
      print(frame["data"].sum())
      
      >>> TypeError: can only concatenate str (not "int") to str
      

      请注意,新版本的 pandas 有更清晰的错误消息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-09
        • 1970-01-01
        • 1970-01-01
        • 2018-10-12
        • 2021-05-13
        • 2021-11-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多