【问题标题】:Pandas Dataframe Only Returning first Row of JSON DataPandas Dataframe 仅返回 JSON 数据的第一行
【发布时间】:2021-04-21 03:27:08
【问题描述】:

我正在做一个网络抓取项目,如果我使用下面的#print 命令,我拥有所有正确的代码,可以以我想要的格式返回 json 数据,但是当我运行相同的代码时,除了通过 Pandas Dataframe,它只返回我正在寻找的第一行数据。只需运行打印,它就会返回我正在寻找的预期的 17 行数据。 Dataframe to CSV 只给了我第一行。完全被难住了!非常感谢任何人的帮助!

for item in response['body']:
    DepartureDate = item['legs'][0][0]['departDate']
    ReturnDate = item['legs'][1][0]['departDate']
    Airline = item['legs'][0][0]['airline']['code']
    Origin = item['legs'][0][0]['depart']
    Destination = item['legs'][0][0]['destination']
    OD = (Origin + Destination)
    TrueBaseFare = item['breakdown']['baseFareAmount']
    YQYR = item['breakdown']['fuelSurcharge']
    TAX = item['breakdown']['totalTax']
    TTL = item['breakdown']['totalFareAmount']
    MARKEDUPTTL = item['breakdown']['totalCalculatedFareAmount']
    MARKUP = ((MARKEDUPTTL - TTL) / (TTL)*100)
    FBC = item['fareBasisCode']

    #print(DepartureDate,ReturnDate,Airline,OD,TrueBaseFare,YQYR,TAX,TTL,MARKEDUPTTL,MARKUP,FBC)

MI = pd.DataFrame(
     {'Dept': [DepartureDate],
     'Ret': [ReturnDate],
     'AirlineCode': [Airline],
     'Routing': [OD],
     'RealFare': [TrueBaseFare],
     'Fuel': [YQYR],
     'Taxes': [TAX],
     'RealTotal': [TTL],
     'AgencyTotal': [MARKEDUPTTL],
     'Margin': [MARKUP],
     'FareBasis': [FBC],
    })

df = pd.DataFrame(MI)

pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
pd.set_option('display.width', None)

df.to_csv('MITest7.csv')

【问题讨论】:

    标签: python json dataframe


    【解决方案1】:

    当您在循环后打印所有值时,您会看到您只获得最后一个值。要解决此问题,您需要创建列表并将您的值放在那里。 试试这个:

    DepartureDate = []
    ReturnDate = []
    Airline = []
    Origin = []
    Destination = []
    OD = []
    TrueBaseFare = []
    YQYR = []
    TAX = []
    TTL = []
    MARKEDUPTTL = []
    MARKUP = []
    FBC = []
    
    for item in response['body']:
        DepartureDate.append(item['legs'][0][0]['departDate'])
        ReturnDate.append(item['legs'][1][0]['departDate'])
        Airline.append(item['legs'][0][0]['airline']['code'])
        Origin.append(item['legs'][0][0]['depart'])
        Destination.append(item['legs'][0][0]['destination'])
        OD.append((Origin[-1] + Destination[-1]))
        TrueBaseFare.append(item['breakdown']['baseFareAmount'])
        YQYR.append(item['breakdown']['fuelSurcharge'])
        TAX.append(item['breakdown']['totalTax'])
        TTL.append(item['breakdown']['totalFareAmount'])
        MARKEDUPTTL.append(item['breakdown']['totalCalculatedFareAmount'])
        MARKUP.append(((MARKEDUPTTL[-1] - TTL[-1]) / (TTL[-1])*100))
        FBC.append(item['fareBasisCode'])
    

    【讨论】:

    • 谢谢!!这样可以使 .csv 文件包含所有预期的数据,但奇怪的是,它将所有返回值放在同一行中。它应该显示 11 列和 17 行数据。现在它显示 11 列和 1 行,每个单元格包括所有 17 行。有什么想法吗?
    猜你喜欢
    • 2021-08-27
    • 2021-11-14
    • 2021-08-17
    • 2020-10-18
    • 1970-01-01
    • 2019-01-13
    • 2017-04-17
    • 1970-01-01
    相关资源
    最近更新 更多