結論:
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
2. tuple要先轉成list
ref: Pandas常見基本操作:
3. 客製化Pandas DataFrame的資料索引及欄位名稱,可以分別利用index及columns屬性(Attribute)來達成,如下範例:
- import pandas as pd
- grades = {
- "name": ["Mike", "Sherry", "Cindy", "John"],
- "math": [80, 75, 93, 86],
- "chinese": [63, 90, 85, 70]
- }
- df = pd.DataFrame(grades)
- df.index = ["s1", "s2", "s3", "s4"] #自訂索引值
- df.columns = ["student_name", "math_score", "chinese_score"] #自訂欄位名稱
- print(df)
- 4. append():新增一筆或一列的資料,透過傳入字典(Dictionary)來指定各欄位的值,並且會回傳一個新的Pandas DataFrame資料集,如下範例:
- new_df = df.append({
- "name": "Henry",
- "math": 60,
- "chinese": 62
- }, 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))}global df_RepStockdf_RepStock = pd.concat([df_RepStock, dictRepStock], 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
成功解決問題
5. 修改Pandas DataFrame資料
利用Pandas DataFrame的at[]及iat[]取得所要修改的單一值後,來進行資料內容的修改,如下範例:
- import pandas as pd
- grades = {
- "name": ["Mike", "Sherry", "Cindy", "John"],
- "math": [80, 75, 93, 86],
- "chinese": [63, 90, 85, 70]
- }
- df = pd.DataFrame(grades)
- print("原來的df")
- print(df)
- print("=================================")
- df.at[1, "math"] = 100 #修改索引值為1的math欄位資料
- df.iat[1, 0] = "Larry" #修改索引值為1的第一個欄位資料
- print("修改後的df")
- print(df)
- 5. pandas, 用list加新資料, 新增一行(新增一資料欄)
- 在 Pandas 中
[]
運算子方法新增新列 - 在 Pandas 中
df.insert()
方法可新增新列 - 在 Pandas 中
df.assign()
方法可新增新列 - 在 Pandas 中
df.loc()
方法新增新列
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
沒有留言:
張貼留言