Фрейм данных смещен с помощью Pandas на Python3 - PullRequest
0 голосов
/ 11 ноября 2018

У меня есть data, который я пытаюсь сохранить в pandas dataFrame. Но это выглядит странным образом. Я знаю, что делаю что-то не так

Может ли кто-нибудь помочь мне найти, что не так.

Код

root@optstra:~# cat pandas_1.py
import pandas as pd
import numpy as np

numberOfRows = 1

SYMBOL = 'ABB'
volume_increasing = True
price_increase = True
OI_CHANGE = True
closedAboveYesterday = False
Above_22SMA = False

data_frame = pd.DataFrame(index=np.arange(0, numberOfRows), columns=('SYMBOL','Volume', 'Price', 'OI','OHLC','22SMA') )

for x in range(0,numberOfRows):
    data_frame.loc[x] = [{SYMBOL,volume_increasing,price_increase,OI_CHANGE,closedAboveYesterday,Above_22SMA} for n in range(6)]

print(data_frame)

Выход

root@optstra:~# python3 pandas_1.py
               SYMBOL              Volume               Price                  OI                OHLC               22SMA
0  {False, True, ABB}  {False, True, ABB}  {False, True, ABB}  {False, True, ABB}  {False, True, ABB}  {False, True, ABB}

Если я изменю строку, которая записывает данные во фрейм данных, следующим образом

for x in range(0,numberOfRows):
    data_frame.loc[x] = [(SYMBOL,volume_increasing,price_increase,OI_CHANGE,closedAboveYesterday,Above_22SMA) for n in range(6)]

Выход изменяется на

root@optstra:~# python3 pandas_1.py
                                  SYMBOL                  ...                                                    22SMA
0  (ABB, True, True, True, False, False)                  ...                    (ABB, True, True, True, False, False)

Ответы [ 3 ]

0 голосов
/ 11 ноября 2018

Обновление пустого фрейма (например, с использованием loc по одной строке за раз) неэффективно.

Так лучше / быстрее создать список путем добавления DataFrame contructor:

data = []
for x in np.arange(numberOfRows):
    row = [SYMBOL,volume_increasing,price_increase,OI_CHANGE,closedAboveYesterday,Above_22SMA]
    data.append(row)

c = ('SYMBOL','Volume', 'Price', 'OI','OHLC','22SMA')
data_frame = pd.DataFrame(data, columns=c)

list comprehension alternative:

data = [[SYMBOL,volume_increasing,price_increase,OI_CHANGE,closedAboveYesterday,Above_22SMA] for x in np.arange(numberOfRows)]
0 голосов
/ 11 ноября 2018

Мне кажется, вы не совсем правильно индексируете фрейм данных. Вы можете сделать это:

for x in range(0, numberOfRows):
    data_frame['SYMBOL'][x] = SYMBOL
    data_frame['Volume'][x] = volume_increasing
    data_frame['Price'][x] = price_increase
    data_frame['OI'][x] = OI_CHANGE
    data_frame['OHLC'][x] = closedAboveYesterday
    data_frame['22SMA'][x] = Above_22SMA

, который даст вам желаемый результат, в качестве альтернативы вы можете использовать словари и вообще избежать цикла for:

columns = ['SYMBOL','Volume', 'Price', 'OI','OHLC','22SMA']
data = {'SYMBOL': 'AAB',
        'Volume': True,
        'Price': True,
        'OI': True,
        'OHLC': False,
        '22SMA': False}

data_frame = pd.DataFrame(data=data, index=np.arange(0, 1), columns=columns)
0 голосов
/ 11 ноября 2018

Почему бы вам не попробовать это - не уверен, что это именно то, что вы ищете, так как вы приняли это участие в редактировании:

for x in range(0,numberOfRows):
    data_frame.loc[x] = [SYMBOL,volume_increasing,price_increase,OI_CHANGE,closedAboveYesterday,Above_22SMA]

Выход:

  SYMBOL Volume Price    OI   OHLC  22SMA
0    ABB   True  True  True  False  False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...