为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

白衣染霜花 2021-08-14 19:27:54
我有一个data我想存储在数据pandas帧中的。但是,它以一种奇怪的方式出现。我知道我做错了什么有人可以帮我找出问题所在。代码root@optstra:~# cat pandas_1.pyimport pandas as pdimport numpy as npnumberOfRows = 1SYMBOL = 'ABB'volume_increasing = Trueprice_increase = TrueOI_CHANGE = TrueclosedAboveYesterday = FalseAbove_22SMA = Falsedata_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               22SMA0  {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                  ...                                                    22SMA0  (ABB, True, True, True, False, False)                  ...                    (ABB, True, True, True, False, False)
查看完整描述

3 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

更新一个空帧(例如使用 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)]


查看完整回答
反对 回复 2021-08-14
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

你为什么不试试这个——不确定它是否正是你要找的东西,因为你在编辑中去掉了这部分:


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


查看完整回答
反对 回复 2021-08-14
?
守着星空守着你

TA贡献1799条经验 获得超8个赞

在我看来,您并没有完全正确地索引数据框。你可以这样做:


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)


查看完整回答
反对 回复 2021-08-14
  • 3 回答
  • 0 关注
  • 180 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号