【问题标题】:Type error, 'method' object is not subscriptable while iteratig类型错误,“方法”对象在迭代时不可下标
【发布时间】:2019-10-30 13:50:04
【问题描述】:

我正在处理巨大的数据框:

reader = pd.read_csv("D:/...path.../test.csv", names=["id_easy","ordinal", "latitude", "longitude","epoch",'weekday'], 
                 parse_dates=['epoch'], chunksize=n_rows, error_bad_lines=False)

day_names = (('0:00', '1:00'),('1:00', '2:00'),('2:00', '3:00'),('3:00', '4:00'),('4:00', '5:00'),('5:00', '6:00'),
             ('6:00', '7:00'),('7:00', '8:00'),('8:00', '9:00'),('9:00', '10:00'),('10:00', '11:00'),('11:00', '12:00'),
             ('12:00', '13:00'),('13:00', '14:00'),('14:00', '15:00'),('15:00', '16:00'),('16:00', '17:00'),('17:00', '18:00'),
             ('18:00', '19:00'),('19:00', '20:00'),('20:00', '21:00'),('21:00', '22:00'),('22:00', '23:00'),('23:00', '00:00'))

for df in reader: 
    if not df.empty: 
        df['epoch'] = pd.to_datetime(df.epoch,unit = 's')
        df.index = pd.to_datetime(df.epoch)
        for day in day_names: 
            day_df = df.between_time[day] # ERROR IS HERE
            if not day_df.empty:
                day_df.to_csv(f'{day}.csv', index=False, header=False, mode='a')

TypeError: 'method' 对象不可下标


所需的输出是 24 个 .csv 文件,例如:final1,final2,...,final24


样本数据:

e35f652a    68  11.9125 3.7432  1465084811  Sunday
e35f652a    69  11.8992 3.7412  1465084870  Sunday
e35f652a    70  11.8866 3.7342  1465084930  Sunday
e35f652a    71  11.8755 3.7321  1465084990  Sunday
e35f652a    72  11.8675 3.7247  1465085050  Sunday

不知何故this的问题或多或少相似

【问题讨论】:

    标签: python pandas numpy for-loop


    【解决方案1】:

    将用于索引的[]更改为(),因为DataFrame.between_time()并通过索引选择元组的第一个和第二个值:

    for day in day_names: 
        day_df = df.between_time(day[0], day[1])
    

    或更改解包元组的循环:

    for s, e in day_names: 
        day_df = df.between_time(s, e)
    

    【讨论】:

    • TypeError: between_time() missing 1 required positional argument: 'end_time' 这发生了
    • 我猜它只需要像 ('0:00', '1:00') 这样的开始时间,是吗?
    • 几乎完美!在最后一行中,我在保存新文件时出错OSError: [Errno 22] Invalid argument: "('1:00', '2:00').csv"
    • @Mamed - 然后决定是day_df.to_csv(f'{day[0]}.csv', index=False, header=False, mode='a') 还是day_df.to_csv(f'{day[1]}.csv', index=False, header=False, mode='a')
    • @Mamed 试试day_df.to_csv(f'{day[0].replace(":","_")}.csv', index=False, header=False, mode='a')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 2017-02-23
    • 2017-03-05
    • 2021-03-02
    • 2020-04-18
    • 1970-01-01
    相关资源
    最近更新 更多