python为什么不加第一个循环就能运行,加上就运行不了

为什么不加第一个循环就能运行,加上就运行不了


import pandas as pd
from pathlib import *
dfz = pd.DataFrame(columns=['id', 'time1', 'lng1', 'lat1', 'time2', 'lng2', 'lat2'])
path = '/Users/xing/邢惠尧/课/交通数据分析与建模/Taxi_new/'
p = Path(path)
for w in p.iterdir():
    df = pd.read_csv(w, encoding='utf-8')

    # 制作轨迹段表格,每一行代表一个轨迹段
    df1 = df.shift(-1)
    df1.drop(columns=['id'], inplace=True)
    df = pd.concat([df, df1], axis=1)
    df.columns = ['id', 'time1', 'lng1', 'lat1', 'OpenStatus1', 'time2', 'lng2', 'lat2', 'OpenStatus2']
    df.drop(df.shape[0] - 1, inplace=True)
    # 提取上下车信息,OpenStatus1=0,OpenStatus2=1代表上车;OpenStatus1=1,OpenStatus2=0代表下车
    for i in range(len(df)):
        if df.loc[i, 'OpenStatus1'] == df.loc[i, 'OpenStatus2']:
            df.drop(i, inplace=True)
    # 重置索引
    df.reset_index(drop=True, inplace=True)
    # 将第一条为下车信息的删除,使表格的第一条信息为上车
    if df.loc[0, 'OpenStatus1'] == 1 and df.loc[0, 'OpenStatus2'] == 0:
        df.drop(0, inplace=True)
    # 重置索引
    df.reset_index(drop=True, inplace=True)
    # 制作OD表,每一行代表一次出行信息,左边为上车信息,右边为下车信息
    df.drop(columns=['time2', 'lng2', 'lat2', 'OpenStatus2'], inplace=True)
    df.columns = ['id', 'time', 'lng', 'lat', 'OpenStatus']
    df1 = df.shift(-1)
    df1.drop(columns=['id'], inplace=True)
    df = pd.concat([df, df1], axis=1)
    df.columns = ['id', 'time1', 'lng1', 'lat1', 'OpenStatus1', 'time2', 'lng2', 'lat2', 'OpenStatus2']
    df.drop(df.shape[0] - 1, inplace=True)
    for i in range(1, len(df), 2):
        df.drop(i, inplace=True)
    df.drop(columns=['OpenStatus1', 'OpenStatus2'], inplace=True)
    # 重置索引
    df.reset_index(drop=True, inplace=True)
    # 将所有车的OD合并
    dfz = pd.concat([dfz, df])

dfz.to_csv('OD.cvs', encoding='utf-8', index=False)

img

有错,冲突

您似乎正试图从给定目录中的多个 CSV 文件中提取和合并有关轨道段和行程的信息,然后将结果数据写入新的 CSV 文件。

代码中的第一个循环遍历给定目录中的所有文件,并将每个文件读入一个名为df. 然后它执行一些数据处理df以提取轨道段和行程,然后将结果数据附加到名为dfz.

您遇到的问题可能是由于您inplace在多个数据框操作操作中使用了该参数。该inplace参数允许您就地修改数据框,而无需创建新的数据框。这在某些情况下很有用,但如果不小心,也可能导致意外行为。

特别是,数据框的drop方法返回一个新的数据框,其中删除了指定的行或列,除非inplace参数设置为True. 如果您使用inplace=True,原始数据框将被修改并且该drop方法将返回None。

例如,在这行代码中:

df. drop(columns=['id'], inplace=True)

将df修改数据框以删除“id”列,该drop方法将返回None。如果您随后尝试df使用 与另一个数据框连接pd.concat,您可能会遇到错误,因为df它None不是数据框。

要解决此问题,您应该inplace=False在调用drop方法时进行设置,或者将方法的结果分配给drop新变量:

df = df.drop(columns=['id'], inplace=False)

要么

df = df.drop(columns=['id'])