2023年7月28日 星期五

【Python交易程式開發現場58】【Python程式交易DIY14】使用群益API進行 (2)查價

 【Python程式交易DIY14】使用群益API進行 (2)查價






    def OnNotifyQuoteLONG(self, sMarketNo, nStockidx):    #ctw # 3-【查詢】回報    
        pStock = sk.SKSTOCKLONG()
        m_nCode = skQ.SKQuoteLib_GetStockByIndexLONG(sMarketNo, nStockidx, pStock)
        strMsg = '代碼:',pStock.bstrStockNo,'--名稱:',pStock.bstrStockName,'--開盤價:',str(pStock.nOpen/math.pow(10,pStock.sDecimal)),'--最高:',\
            str(pStock.nHigh/math.pow(10,pStock.sDecimal)),'--最低:',\
            str(pStock.nLow/math.pow(10,pStock.sDecimal)),'--成交價:',str(pStock.nClose/math.pow(10,pStock.sDecimal))\
            ,'--總量:',str(pStock.nTQty)
               
        twStrMsg=twTuple_2_Str(strMsg)
        send.run(twStrMsg)  #發射Signal訊號

        dictRepStock = {'id':pStock.bstrStockNo, 'close': str(pStock.nClose/math.pow(10,pStock.sDecimal))}
        df = pd.DataFrame(dictRepStock, index=[0])
        df = df.set_index('id')
       
        global df_RepStock

        if df_RepStock.empty:
            df_RepStock = pd.concat([df_RepStock, df], axis=0)
        else:    
            #x=df_RepStock.index[df_RepStock['id']=='TXO17100H3'].to_list()
            df_RepStock.loc['TXO17100H3', 'close'] = df.loc["TXO17100H3","close"]

        print(df_RepStock)
        pass





問題出在:

df_RepStock.loc['TXO17100H3', 'close'] = df.loc["TXO17100H3","close"]



修正後, 問題解決..



【Python交易程式開發現場57】【Python程式交易DIY13】使用群益API進行 (1) 連線 + Qt Designer設計GUI | 程式架構介紹

 






2023年7月26日 星期三

【Python交易程式開發現場56】產生交易訊號 (16) | 將交易訊號送至下單函數 | 商品代碼(TXO17500H3: 8月call, TXO16500N3: 8月put )

TXO17500H3: 8月call, 

TXO16500T3: 8月put, 


1-6月call: A-F

7-12月call: G-L

1-6月put: M-R

7-12月put: S-X

所以目前8月call為H.. 9月call為I, 

8月put為N, 9月put為O


https://blog.futures-ai.com/contract-code/





2023年7月22日 星期六

markdown and vscode

markdown

只要 3 個擴充套件,讓 VS Code 變成專業 Markdown 文件編輯器

套件 1:Markdown All in One

Markdown All in One 是增強 VS Code 的 Markdown 編輯能力的主要擴充套件,它提供了更多的自動化功能,例如:反白文字 Ctrl + V 貼上超連結自動完成語法、清單元素中 Enter 自動接續縮排、數學公式等實用功能,本文不一一介紹,有興趣者可參考 Markdown All in One – Visual Studio Marketplace 的說明內容。

套件 3:Markdown PDF

Markdown PDF 顧名思義是提供了 Markdown 文件輸出 PDF 的功能,除了能輸出 PDF 檔案外,它還另外提供了 HTML、PNG 與 JPEG 的輸出格式。

vnpy windows install

windows_install.md

Windows安装指南

本文档中安装步骤适用的Windows系统包括:

  • Windows 10/11
  • Windows Server 2019

其他版本的Windows系统安装时可能遇到各种依赖库问题,不推荐使用。

在Windows系统上安装VeighNa,推荐使用官方推出的【VeighNa Studio Python发行版】,尤其是初次接触Python的编程新手

作为一站式的量化投研交易Python环境,VeighNa Studio整合了:

  • Python 3.10 64位(Python官网版本)
  • VeighNa和其他相关依赖库
  • VeighNa Station(VeighNa框架的图形化管理工具)

对于已经有比较丰富的编程经验或者需要用到特定Python发行版(如Anaconda)的用户,也可以采用手动安装的方案。

VeighNa Studio方案

下载安装

VeighNa官网可以下载VeighNa Studio安装包。

下载完成后,双击安装包进入VeighNa Studio安装向导(推荐点击右键,选择【使用管理员身份运行】进行安装),使用默认设置点击【快速安装】按钮即可进行VeighNa Studio安装,如下图所示:

推荐将VeighNa Studio安装在默认路径的C:\veighna_studio,其他VeighNa文档和教程中均使用该目录作为VeighNa安装目录进行讲解。

如果想进行个性化安装,可点击【自定义安装】进入高级选项页面,如下图所示:

安装完成后,会转换到安装成功页面,如下图所示:

此时桌面会出现VeighNa Station的图标,双击图标即可运行VeighNa Station。

使用

安装成功后,启动命令行工具即可直接使用VeighNa Studio Python发行版。

输入python即可进入python的交互式环境,如下图所示:

此时在命令行中输入python代码就会立即执行。如果想运行pyqtgraph的自带的例子,可以依次输入以下代码:

from pyqtgraph import examples examples.run()

此时则会弹出Examples的运行窗口,如下图所示:

点击左侧的Basic Plotting则会弹出示例的图形界面,如下图所示:

如果想打开jupyter lab进行投资研究工作,可以打开cmd,输入jupyter lab,即可成功启动,如下图所示:

修改

如果安装之后,想要添加或者移除某项功能,可以双击VeighNa Studio的安装包,进入VeighNa Studio安装界面,如下图所示:

点击【修改】,进入修改页面,如下图所示:

选择完可选功能后,点击【下一步】,进入高级选项页面,如下图所示:

选择完毕,即可重新安装。

修复

如果安装之后,出现安装不完整或者其他需要修复的情况,可以双击VeighNa Studio的安装包,进入VeighNa Studio安装界面,如下图所示:

点击【修复】,进入修复界面,如下图所示:

修复完成后,会转换到修复成功页面,如下图所示:

卸载

如果想卸载VeighNa Studio, 可以双击VeighNa Studio的安装包,进入VeighNa Studio安装界面,如下图所示:

点击【卸载】,进入卸载界面,如下图所示:

卸载完成后,会转换到卸载成功页面,如下图所示:

手动安装方案

准备Python环境

首先请在电脑上准备好Python 3.10 64位环境(注意必须是64位版本),推荐使用Python官网的发行版,也可以使用Anaconda、Miniconda、Canopy等发行版。

这里我们以Python官网的发行版为例,首先在Python官网下载安装文件,选择【Windows installer (64-bit)】,如下图所示:

下载完毕后,双击文件进入Python安装向导,勾选【Add Python3.10 to PATH】选项后,点击【Install Now】进行安装,推荐使用默认设置一路点击【下一步】直到安装完成即可:

下载安装VeighNa

下载VeighNa源代码(Windows系统请选择zip格式):

下载完成后解压,然后启动命令行工具(CMD或者PowerShell),进入源代码所在的目录后(即install.bat文件所在的目录),输入下列命令运行脚本执行一键安装:

install.bat

一键安装过程整体分为3步:

  1. 下载安装ta-lib库;
  2. 安装requirements.txt文件内的相关依赖库;
  3. 安装VeighNa本身。

如果某一步安装过程中发生错误,请截取保存命令行中的报错信息(注意优先保存底部的报错内容),前往VeighNa社区论坛发帖提问寻求帮助。

启动VeighNa Trader

启动命令行工具,进入解压VeighNa源代码的目录下,在文件夹examples/veighna_trader中找到run.py文件。

输入如下命令即可启动VeighNa Trader:

python run.py

请注意run.py中包含了较多的启动加载项(交易接口和应用模块),请根据自己所用的操作系统以及实际的交易需求修改调整使用(若需加载接口,取消接口前注释符号即可)。

连接接口介绍详见交易接口篇。

如果启动时出现一些库版本不兼容的情况,可根据提示对这些库重新pip安装。

2023年7月21日 星期五

【Python交易程式開發現場55】接收商品報價(3) | 將訂閱商品資訊存入pandas | 單一商品

 pandas內之商品報價更新 (Line 530)


【結論】
1. 產生空的dataframe: df_RepStock = pd.DataFrame()

2. 判断DataFrame是否为空: df.empty

3. 判断DataFrame中是否已有某商品:
x=df_RepStock.index[df_RepStock['id']=='TXO17100H3'].to_list()

4. 將某商品加入DataFrame中:
df_RepStock = pd.concat([df_RepStock, df], axis=0)

5.更改某商品在DataFrame中的值: 
df=df.set_index('id')
df.loc['id','close']=value


4.使用条件表达式进行查询
##查询上证指数收盘<3000点的,且成交额少于1000亿(amount单位为千元)的日子,显示全部的列
df.loc[(df['close'] < 3000) & (df['amount'] < 100000000),:]
https://zhuanlan.zhihu.com/p/138037895

df.loc['id','close']=value

https://blog.csdn.net/RPG_Zero/article/details/109190053


df.['name']==value


























用 pandas.DataFrame.index() 獲取行的索引

如果你想只查詢滿足作為引數傳遞的布林條件的 DataFrame 的匹配索引,pandas.DataFrame.index() 是最簡單的實現方式。

import pandas as pd
import numpy as np

np.random.seed(0)

df = pd.DataFrame(np.random.randint(1,20,size=(20, 4)), columns=list('ABCD'))

print (df.index[df['B'] == 19].tolist())

用精確字串匹配獲取行的索引

print (df.index[(df['Name'] == 'blue')].tolist())
print ('\n')
print (df.loc[df['Name'] == 'blue'])
print ('\n')
print (df.loc[(df['Name'] == 'charlie') & (df['Type'] =='Raptors')])

https://www.delftstack.com/zh-tw/howto/python-pandas/pandas-get-index-of-row/











https://blog.csdn.net/weixin_43977640/article/details/109909787


    def OnNotifyQuoteLONG(self, sMarketNo, nStockidx):    #ctw # 3-【查詢】回報    
        pStock = sk.SKSTOCKLONG()
        m_nCode = skQ.SKQuoteLib_GetStockByIndexLONG(sMarketNo, nStockidx, pStock)
        strMsg = '代碼:',pStock.bstrStockNo,'--名稱:',pStock.bstrStockName,'--開盤價:',str(pStock.nOpen/math.pow(10,pStock.sDecimal)),'--最高:',\
            str(pStock.nHigh/math.pow(10,pStock.sDecimal)),'--最低:',\
            str(pStock.nLow/math.pow(10,pStock.sDecimal)),'--成交價:',str(pStock.nClose/math.pow(10,pStock.sDecimal))\
            ,'--總量:',str(pStock.nTQty)
               
        twStrMsg=twTuple_2_Str(strMsg)
        send.run(twStrMsg)  #發射Signal訊號

        dictRepStock = {'id':pStock.bstrStockNo, 'close': str(pStock.nClose/math.pow(10,pStock.sDecimal))}
        df = pd.DataFrame(dictRepStock, index=[0])
        global df_RepStock
        #df_RepStock = pd.concat([df_RepStock, df], axis=0)
        x=df_RepStock.index[df_RepStock['id']=='TXO17100H3'].to_list()
        print(df_RepStock)
        #df_dictRepStock = df_dictRepStock.append(dictRepStock)
        pass

    x=df_RepStock.index[df_RepStock['id']=='TXO17100H3'].to_list()

  File "d:\tw-skcom-python-43\all\.venv\lib\site-packages\pandas\core\frame.py", line 3805, in __getitem__    

    indexer = self.columns.get_loc(key)

  File "d:\tw-skcom-python-43\all\.venv\lib\site-packages\pandas\core\indexes\base.py", line 3802, in get_loc 

    raise KeyError(key) from err

KeyError: 'id'


















可以使用 df.empty 来判断一个Pandas DataFrame 是否为空。 如果DataFrame 为空,则返回True,否则返回False。 还可以使用 df.shape[0] 来判断DataFrame 中是否有行,如果有行,则返回True,否则返回False。


    def OnNotifyQuoteLONG(self, sMarketNo, nStockidx):    #ctw # 3-【查詢】回報    
        pStock = sk.SKSTOCKLONG()
        m_nCode = skQ.SKQuoteLib_GetStockByIndexLONG(sMarketNo, nStockidx, pStock)
        strMsg = '代碼:',pStock.bstrStockNo,'--名稱:',pStock.bstrStockName,'--開盤價:',str(pStock.nOpen/math.pow(10,pStock.sDecimal)),'--最高:',\
            str(pStock.nHigh/math.pow(10,pStock.sDecimal)),'--最低:',\
            str(pStock.nLow/math.pow(10,pStock.sDecimal)),'--成交價:',str(pStock.nClose/math.pow(10,pStock.sDecimal))\
            ,'--總量:',str(pStock.nTQty)
               
        twStrMsg=twTuple_2_Str(strMsg)
        send.run(twStrMsg)  #發射Signal訊號

        dictRepStock = {'id':pStock.bstrStockNo, 'close': str(pStock.nClose/math.pow(10,pStock.sDecimal))}
        df = pd.DataFrame(dictRepStock, index=[0])
        global df_RepStock

        if df_RepStock.empty:
            df_RepStock = pd.concat([df_RepStock, df], axis=0)
        else:    
            x=df_RepStock.index[df_RepStock['id']=='TXO17100H3'].to_list()

        print(df_RepStock)

成功解決問題

















5.更改某商品在DataFrame中的值:
df=df.set_index('id')
df.loc['id','close']=value









https://blog.csdn.net/RPG_Zero/article/details/109190053












File "d:\tw-skcom-python-43\all\call_twMain.py", line 534, in OnNotifyQuoteLONG

x=df_RepStock.index[df_RepStock['id']=='TXO17100H3'].to_list()

File "d:\tw-skcom-python-43\all\.venv\lib\site-packages\pandas\core\frame.py", line 3805, in __getitem__

indexer = self.columns.get_loc(key)

File "d:\tw-skcom-python-43\all\.venv\lib\site-packages\pandas\core\indexes\base.py", line 3802, in get_loc

raise KeyError(key) from err

KeyError: 'id'

        dictRepStock = {'id':pStock.bstrStockNo, 'close': str(pStock.nClose/math.pow(10,pStock.sDecimal))}
        df = pd.DataFrame(dictRepStock, index=[0])
        df = df.set_index('id')
       
        global df_RepStock

        if df_RepStock.empty:
            df_RepStock = pd.concat([df_RepStock, df], axis=0)
        else:    
            x=df_RepStock.index[df_RepStock['id']=='TXO17100H3'].to_list()

        print(df_RepStock)


Terminal:

--- 把信号绑定到槽函数 ---
1-登入
OnReplyMessage 回報正常 SKReplyLib_OnReplyMessage:Announcement callback.
登入成功
2-連線
3-查詢
           close
id
TXO17100H3   0.0

Debug Console 不認得:

df_RepStock['id']

'id'此時已成為index, 不能算是資料欄了..


5.更改某商品在DataFrame中的值:
df=df.set_index('id')
df.loc['id','close']=value








如何取出df中之close?


Debug Console:

df.loc["TXO17100H3","close"]

'170.0'

成功..

    def OnNotifyQuoteLONG(self, sMarketNo, nStockidx):    #ctw # 3-【查詢】回報    
        pStock = sk.SKSTOCKLONG()
        m_nCode = skQ.SKQuoteLib_GetStockByIndexLONG(sMarketNo, nStockidx, pStock)
        strMsg = '代碼:',pStock.bstrStockNo,'--名稱:',pStock.bstrStockName,'--開盤價:',str(pStock.nOpen/math.pow(10,pStock.sDecimal)),'--最高:',\
            str(pStock.nHigh/math.pow(10,pStock.sDecimal)),'--最低:',\
            str(pStock.nLow/math.pow(10,pStock.sDecimal)),'--成交價:',str(pStock.nClose/math.pow(10,pStock.sDecimal))\
            ,'--總量:',str(pStock.nTQty)
               
        twStrMsg=twTuple_2_Str(strMsg)
        send.run(twStrMsg)  #發射Signal訊號

        dictRepStock = {'id':pStock.bstrStockNo, 'close': str(pStock.nClose/math.pow(10,pStock.sDecimal))}
        df = pd.DataFrame(dictRepStock, index=[0])
        df = df.set_index('id')
       
        global df_RepStock

        if df_RepStock.empty:
            df_RepStock = pd.concat([df_RepStock, df], axis=0)
        else:    
            #x=df_RepStock.index[df_RepStock['id']=='TXO17100H3'].to_list()
            df_RepStock.loc['TXO17100H3', 'close'] = df.loc["TXO17100H3","close"]

        print(df_RepStock)

成功..






2023年7月20日 星期四

【Python交易程式開發現場54】接收商品報價(2) | 將訂閱商品資訊存入記憶體

結論:

1. 用dict建dataframe時, 要設index

df = pd.DataFrame(dictRepStock, index=[0])

2. 於pandas加一筆data要用concat, 

df_RepStock = pd.concat([df_RepStock, df], axis=0) 


1.檢查接收到的商品報價之資料型態: 結果為Tuple



def twTuple_2_Str(twTuple):
    strTuple=[str(t) for t in twTuple]
    return ','.join(strTuple)


2. tuple要先轉成list





  1. ref: Pandas常見基本操作: 

Create Empty dataframe:

# import pandas library as pd
import pandas as pd
 
df = pd.DataFrame()
 
print(df)
  1. 3. 客製化Pandas DataFrame的資料索引及欄位名稱,可以分別利用index及columns屬性(Attribute)來達成,如下範例:

    1. import pandas as pd
    2.  
    3.  
    4. grades = {
    5. "name": ["Mike", "Sherry", "Cindy", "John"],
    6. "math": [80, 75, 93, 86],
    7. "chinese": [63, 90, 85, 70]
    8. }
    9.  
    10. df = pd.DataFrame(grades)
    11. df.index = ["s1", "s2", "s3", "s4"] #自訂索引值
    12. df.columns = ["student_name", "math_score", "chinese_score"] #自訂欄位名稱
    13. print(df)

  2. 4. append():新增一筆或一列的資料,透過傳入字典(Dictionary)來指定各欄位的值,並且會回傳一個新的Pandas DataFrame資料集,如下範例:

  3. new_df = df.append({
  4. "name": "Henry",
  5. "math": 60,
  6. "chinese": 62
  7. }, ignore_index=True)

    def OnNotifyQuoteLONG(self, sMarketNo, nStockidx):    #ctw # 3-【查詢】回報    
        pStock = sk.SKSTOCKLONG()
        m_nCode = skQ.SKQuoteLib_GetStockByIndexLONG(sMarketNo, nStockidx, pStock)
        strMsg = '代碼:',pStock.bstrStockNo,'--名稱:',pStock.bstrStockName,'--開盤價:',str(pStock.nOpen/math.pow(10,pStock.sDecimal)),'--最高:',\
            str(pStock.nHigh/math.pow(10,pStock.sDecimal)),'--最低:',\
            str(pStock.nLow/math.pow(10,pStock.sDecimal)),'--成交價:',str(pStock.nClose/math.pow(10,pStock.sDecimal))\
            ,'--總量:',str(pStock.nTQty)
               
        twStrMsg=twTuple_2_Str(strMsg)
        send.run(twStrMsg)  #發射Signal訊號

        dictRepStock = {'name':pStock.bstrStockName, 'close': str(pStock.nClose/math.pow(10,pStock.sDecimal))}
        import pandas as pd
        global df_RepStock
        df_RepStock = df_RepStock.append(dictRepStock)


    d:\tw-skcom-python-43\all\call_twMain.py:519: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.
    df_RepStock = df_RepStock.append(dictRepStock)

    # 使用 concat 合併 axis=0 為直向合併 
    res = pd.concat([df1,df2,df3],axis=0)

  1.     def OnNotifyQuoteLONG(self, sMarketNo, nStockidx):    #ctw # 3-【查詢】回報    
            pStock = sk.SKSTOCKLONG()
            m_nCode = skQ.SKQuoteLib_GetStockByIndexLONG(sMarketNo, nStockidx, pStock)
            strMsg = '代碼:',pStock.bstrStockNo,'--名稱:',pStock.bstrStockName,'--開盤價:',str(pStock.nOpen/math.pow(10,pStock.sDecimal)),'--最高:',\
                str(pStock.nHigh/math.pow(10,pStock.sDecimal)),'--最低:',\
                str(pStock.nLow/math.pow(10,pStock.sDecimal)),'--成交價:',str(pStock.nClose/math.pow(10,pStock.sDecimal))\
                ,'--總量:',str(pStock.nTQty)
                   
            twStrMsg=twTuple_2_Str(strMsg)
            send.run(twStrMsg)  #發射Signal訊號

            dictRepStock = {'name':pStock.bstrStockName, 'close': str(pStock.nClose/math.pow(10,pStock.sDecimal))}

            global df_RepStock
            df_RepStock = pd.concat([df_RepStock, dictRepStock], axis=0)
            #df_dictRepStock = df_dictRepStock.append(dictRepStock)
            pass

TypeError: cannot concatenate object of type '<class 'dict'>'; only Series and DataFrame objs are valid  

    def OnNotifyQuoteLONG(self, sMarketNo, nStockidx):    #ctw # 3-【查詢】回報    
        pStock = sk.SKSTOCKLONG()
        m_nCode = skQ.SKQuoteLib_GetStockByIndexLONG(sMarketNo, nStockidx, pStock)
        strMsg = '代碼:',pStock.bstrStockNo,'--名稱:',pStock.bstrStockName,'--開盤價:',str(pStock.nOpen/math.pow(10,pStock.sDecimal)),'--最高:',\
            str(pStock.nHigh/math.pow(10,pStock.sDecimal)),'--最低:',\
            str(pStock.nLow/math.pow(10,pStock.sDecimal)),'--成交價:',str(pStock.nClose/math.pow(10,pStock.sDecimal))\
            ,'--總量:',str(pStock.nTQty)
               
        twStrMsg=twTuple_2_Str(strMsg)
        send.run(twStrMsg)  #發射Signal訊號

        dictRepStock = {'name':pStock.bstrStockName, 'close': str(pStock.nClose/math.pow(10,pStock.sDecimal))}
        df = pd.DataFrame(dictRepStock)
        global df_RepStock
        df_RepStock = pd.concat([df_RepStock, df], axis=0)
        #df_dictRepStock = df_dictRepStock.append(dictRepStock)
        pass




File "d:\tw-skcom-python-43\all\.venv\lib\site-packages\pandas\core\internals\construction.py", line 119, in arrays_to_mgr
index = _extract_index(arrays)
File "d:\tw-skcom-python-43\all\.venv\lib\site-packages\pandas\core\internals\construction.py", line 657, in _extract_index
raise ValueError("If using all scalar values, you must pass an index")
ValueError: If using all scalar values, you must pass an index



https://blog.csdn.net/weixin_39750084/article/details/81429037

    def OnNotifyQuoteLONG(self, sMarketNo, nStockidx):    #ctw # 3-【查詢】回報    
        pStock = sk.SKSTOCKLONG()
        m_nCode = skQ.SKQuoteLib_GetStockByIndexLONG(sMarketNo, nStockidx, pStock)
        strMsg = '代碼:',pStock.bstrStockNo,'--名稱:',pStock.bstrStockName,'--開盤價:',str(pStock.nOpen/math.pow(10,pStock.sDecimal)),'--最高:',\
            str(pStock.nHigh/math.pow(10,pStock.sDecimal)),'--最低:',\
            str(pStock.nLow/math.pow(10,pStock.sDecimal)),'--成交價:',str(pStock.nClose/math.pow(10,pStock.sDecimal))\
            ,'--總量:',str(pStock.nTQty)
               
        twStrMsg=twTuple_2_Str(strMsg)
        send.run(twStrMsg)  #發射Signal訊號

        dictRepStock = {'name':pStock.bstrStockName, 'close': str(pStock.nClose/math.pow(10,pStock.sDecimal))}
        df = pd.DataFrame(dictRepStock, index=[0])
        global df_RepStock
        df_RepStock = pd.concat([df_RepStock, df], axis=0)
        #df_dictRepStock = df_dictRepStock.append(dictRepStock)
        pass
  1. 成功解決問題

  2. 5. 修改Pandas DataFrame資料

    利用Pandas DataFrame的at[]及iat[]取得所要修改的單一值後,來進行資料內容的修改,如下範例:

    1. import pandas as pd
    2.  
    3.  
    4. grades = {
    5. "name": ["Mike", "Sherry", "Cindy", "John"],
    6. "math": [80, 75, 93, 86],
    7. "chinese": [63, 90, 85, 70]
    8. }
    9.  
    10. df = pd.DataFrame(grades)
    11.  
    12. print("原來的df")
    13. print(df)
    14.  
    15. print("=================================")
    16.  
    17. df.at[1, "math"] = 100 #修改索引值為1的math欄位資料
    18. df.iat[1, 0] = "Larry" #修改索引值為1的第一個欄位資料
    19. print("修改後的df")
    20. print(df)


  1. 5. pandas, 用list加新資料, 新增一行(新增一資料欄)

  2. 在 Pandas 中 [] 運算子方法新增新列
  3. 在 Pandas 中 df.insert() 方法可新增新列
  4. 在 Pandas 中 df.assign() 方法可新增新列
  5. 在 Pandas 中 df.loc() 方法新增新列

    1. import pandas as pd
      data = [
          ['Ali',
           'Azmat',
           '30'],
          ['Sharukh',
           'Khan',
           '40'],
          ['Linus',
           'Torvalds',
           '70']
      ]
      df = pd.DataFrame(data,columns=['First','Last','Age'])
      print(df)
      

      輸出:

           First      Last Age
      0      Ali     Azmat  30
      1  Sharukh      Khan  40
      2    Linus  Torvalds  70
      df = df.assign(city = ['Lahore','Dehli','New York'],
      score = [20,30,40])
      df.loc[:,'city'] = ['Lahore','Dehli','New York']
      df.insert(3,"city",['Lahore','Dehli','New York'],True)
      city = ['Lahore','Dehli','New York']
      df['city'] = city














prog-0318

test test1 Written with StackEdit .