在 Python3 上使用 Pandas 未对齐的数据框

我有一个data我想存储在数据pandas帧中的。但是,它以一种奇怪的方式出现。我知道我做错了什么


有人可以帮我找出问题所在。


代码


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)


白衣染霜花
浏览 181回答 3
3回答

冉冉说

更新一个空帧(例如使用 loc 一次一行)是低效的。所以更好/更快的是通过附加DataFrame构造函数来创建列表: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)]

慕桂英3389331

你为什么不试试这个——不确定它是否正是你要找的东西,因为你在编辑中去掉了这部分: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  22SMA0    ABB   True  True  True  False  False

守着星空守着你

在我看来,您并没有完全正确地索引数据框。你可以这样做: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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python