Python Pandas Проблема с добавлением строк в цикл for - PullRequest
0 голосов
/ 26 марта 2020

Я хотел добавить столбцы данных с уникальными именами. Я пытался сделать это автоматически с помощью для l oop. Я добавил индекс после имени, но отображалось только последнее значение i . Я относительно новичок в python и мне нужна помощь! Спасибо!

Мой код:

from urllib.request import urlopen
import json
import pandas as pd
import sklearn
from matplotlib import pyplot as plt
from sklearn import linear_model
from sklearn.utils import shuffle
import numpy as np
import csv
import time


key = ''

product = 'ENCHANTED_RAW_CHICKEN'
url = 'https://api.hypixel.net/skyblock/bazaar/product?key=' + key + '&productId=' + product
url2 = 'https://api.hypixel.net/gameCounts?key=' + key

for i in range(3):
    json_obj = urlopen(url)
    json_obj2 = urlopen(url2)
    all_data = json.load(json_obj)
    gameCounts = json.load(json_obj2)

    product_info = all_data['product_info']
    week_historic = product_info['week_historic']
    games = gameCounts['games']
    skyblock = (games['SKYBLOCK'])
    skyblock_players = skyblock['players']

    with open('DATA_' + str(product) + '.json', 'w') as outfile:
        json.dump(week_historic, outfile)

    df = pd.read_json (r'DATA_' + product + '.json')
    df.to_csv (r'CSV' + product + '.csv', index = None)

    df = pd.read_csv(r'CSV' + product + '.csv', encoding='utf-8')
    df = df.drop('productId', 1)
    player_count = 'playercount' + str(i)
    df[player_count]= df.shape[0] * [skyblock_players]
    #time.sleep(10)
print(df)
df.to_csv (r'CSV' + product + '.csv', index = None)

Вывод:

timestamp  nowBuyVolume  ...  sells  playercount2
0    2020-03-19 16:46:45.517         45806  ...    248         33202
1    2020-03-19 17:16:45.517         45576  ...    176         33202
2    2020-03-19 17:46:45.517         47132  ...    121         33202
3    2020-03-19 17:59:31.600         38251  ...      0         33202
4    2020-03-19 18:29:31.579         33466  ...     31         33202
..                       ...           ...  ...    ...           ...
335  2020-03-26 14:55:49.357        159465  ...    168         33202
336  2020-03-26 15:25:49.357        157919  ...     92         33202
337  2020-03-26 15:55:49.357        133332  ...     79         33202
338  2020-03-26 16:25:49.357        130275  ...    139         33202
339  2020-03-26 16:28:29.379        130146  ...     16         33202

Как бы я хотел получить вывод:

timestamp  nowBuyVolume  ...  sells  playercount0  playercount1  playercount2
0    2020-03-19 16:46:45.517         45806  ...    248         33200         33201         33202

Мой CSV:

timestamp,nowBuyVolume,nowSellVolume,buyCoins,buyVolume,buys,sellCoins,sellVolume,sells,playercount2
2020-03-19 17:46:45.517,47132,105049,3629664.7,3978,96,3727318.6000000034,3767,121,34537

1 Ответ

0 голосов
/ 26 марта 2020

Прежде всего, ваша ошибка в том, что вы создаете экземпляр в первой части вашего DataFrame.

Я полагаю, что первая часть DataFrame находится в url, а вторая часть в url2

Прежде всего необходимо сделать:

json_obj = urlopen(url)
all_data = json.load(json_obj)
product_info = all_data['product_info']
week_historic = product_info['week_historic']
with open('DATA_' + str(product) + '.json', 'w') as outfile:
        json.dump(week_historic, outfile)

df = pd.read_json (r'DATA_' + product + '.json')
df.to_csv (r'CSV' + product + '.csv', index = None)

df = pd.read_csv(r'CSV' + product + '.csv', encoding='utf-8')

json_obj2 = urlopen(url2)
gameCounts = json.load(json_obj2)
games = gameCounts['games']
skyblock = (games['SKYBLOCK'])
skyblock_players = skyblock['players']

N = 3
for i in range(N):
    player_count = 'playercount' + str(i)
    df[player_count]= # search in skyblock_players or wherever you want the data for each column

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...