在 DataFrame 多列数据中模糊查找匹配数据

import pandas as pd

df = pd.DataFrame(data = [[True, False, False, False],
                          [False, True, False, False],
                          [True, True, False, False],
                          [False, False, True, False]],
                  columns = list('abcd'))
df

abcd0TrueFalseFalseFalse1FalseTrueFalseFalse2TrueTrueFalseFalse3FalseFalseTrueFalse


df[df.a]

abcd0TrueFalseFalseFalse2TrueTrueFalseFalse


df[df.b]

abcd1FalseTrueFalseFalse2TrueTrueFalseFalse


df[df.a | df.b]

abcd0TrueFalseFalseFalse1FalseTrueFalseFalse2TrueTrueFalseFalse


df[df.a & df.b]

abcd2TrueTrueFalseFalse

用 TuShare 上的指数数据来举个例子。

比如,想设计一个输入框,既可以输入指数代码,也可以输入指数名称,来获取指数日线数据。
那么程序获得输入信息后,如何能方便的在两列数据里匹配到你要的数据呢?


import tushare as ts
import pandas as pd

ts.set_token('your_token_code')
pro = ts.pro_api()

市场代码说明MSCIMSCI指数CSI中证指数SSE上交所指数SZSE深交所指数CICC中金指数SW申万指数OTH其他指数


df_index = pd.DataFrame()
mktlist = ['SSE', 'SZSE', 'CSI', 'MSCI', 'SW', 'CICC', 'OTH']
for mkt in mktlist:
    if df_index.empty:
        df_index = pro.index_basic(market=mkt)
    else:
        df_index = df_index.append(pro.index_basic(market=mkt))
df_index

ts_codenamemarketpublishercategorybase_datebase_pointlist_date0000001.SH上证指数SSE中证公司综合指数19901219100.00199107151000002.SH上证A指SSE中证公司综合指数19901219100.00199202212000003.SH上证B指SSE中证公司综合指数19920221100.00199202213000004.SH上证工业类指数SSE中证公司综合指数199304301358.78199305034000005.SH上证商业类指数SSE中证公司综合指数199304301358.7819930503………………………946YCJ006.IB银行间综合债券指数(净价)OTH全国银行间拆借中心债券指数200701041000.0020070104947YCJ007.IB银行间企业债指数(净价)OTH全国银行间拆借中心债券指数200701041000.0020070104948YCJ008.IB银行间中期票据指数(净价)OTH全国银行间拆借中心债券指数200805041000.0020080504949ZNCI.SHF上期锌期货价格指数OTH上海期货交易所商品指数200708101000.0020161201950ZNEI.SHF上期锌超额收益指数OTH上海期货交易所商品指数200708101000.0020161201

9509 rows × 8 columns

利用 pandas.Series.str.contains 进行模糊匹配

pandas.Series.str.contains 返回值是 Boolean 型


df_index.ts_code.str.contains('00000', case=False)
0       True
1       True
2       True
3       True
4       True
       ...

946    False
947    False
948    False
949    False
950    False
Name: ts_code, Length: 9509, dtype: bool

df_index[df_index.ts_code.str.contains('^96', case=False)]

ts_codenamemarketpublishercategorybase_datebase_pointlist_date3193960400.MIMSCI秘鲁MSCIMSCI规模指数19921231100.0None3194961600.MIMSCI波兰MSCIMSCI规模指数19921231100.0None3195962000.MIMSCI葡萄牙MSCIMSCI规模指数19871231100.0None


df_index[df_index.ts_code.str.contains('h$', case=False)]

ts_codenamemarketpublishercategorybase_datebase_pointlist_date0000001.SH上证指数SSE中证公司综合指数19901219100.00199107151000002.SH上证A指SSE中证公司综合指数19901219100.00199202212000003.SH上证B指SSE中证公司综合指数19920221100.00199202213000004.SH上证工业类指数SSE中证公司综合指数199304301358.78199305034000005.SH上证商业类指数SSE中证公司综合指数199304301358.7819930503………………………621SCH072D.SCH上清所5-7年信用债综合指数(净价)OTH上海清算所债券指数20161226100.0020161226622SCH07A.SCH上清所0-1年信用债综合指数OTH上海清算所债券指数20161226100.0020161226623SCH07B.SCH上清所1-3年信用债综合指数OTH上海清算所债券指数20161226100.0020161226624SCH07C.SCH上清所3-5年信用债综合指数OTH上海清算所债券指数20161226100.0020161226625SCH07D.SCH上清所5-7年信用债综合指数OTH上海清算所债券指数20161226100.0020161226

724 rows × 8 columns

下面用同样代码试试指数代码输入和指数名称输入


input_string = input('输入指数代码或指数名称:').strip()
输入指数代码或指数名称:39996

df_info = df_index[df_index.ts_code.str.contains(input_string, case=False) | df_index.name.str.contains(input_string, case=False)]
df_info

ts_codenamemarketpublishercategorybase_datebase_pointlist_date390399960.SZ中证龙头SZSE中证公司主题指数200412311000.020100209391399961.SZ中证上游SZSE中证公司主题指数200412311000.020100416392399962.SZ中证中游SZSE中证公司主题指数200412311000.020100416393399963.SZ中证下游SZSE中证公司主题指数200412311000.020100416394399964.SZ中证新兴SZSE中证公司主题指数200412311000.020100430395399965.SZ中证800地产SZSE中证公司二级行业指数200412311000.020140404396399966.SZ中证800证保SZSE中证公司主题指数200412311000.020140404397399967.SZ中证军工SZSE中证公司主题指数200412311000.020131226398399968.SZ300周期SZSE中证公司主题指数200412311000.020100528399399969.SZ300非周SZSE中证公司主题指数200412311000.020100528


input_string = input('输入指数代码或指数名称:').strip()
输入指数代码或指数名称:中小

df_info = df_index[df_index.ts_code.str.contains(input_string, case=False) | df_index.name.str.contains(input_string, case=False)]
df_info

ts_codenamemarketpublishercategorybase_datebase_pointlist_date43000046.SH上证中小SSE中证公司规模指数200312311000.02009070378000091.SH沪财中小SSE中证公司主题指数200412311000.020110406197000867.SH港中小企SSE中证公司主题指数201411143000.020150826330h00046.SH上证中小全收益SSE中证公司规模指数200312311000.020090703365h00091.SH沪财中小全收益SSE中证公司主题指数200412311000.020110406………………………3056711068L.MI全球市场大中小盘(含部分A股)(人民币)MSCIMSCI其他NoneNaNNone3091718874.MIMSCI中国全股中小盘MSCIMSCI规模指数NoneNaNNone3092718875.MIMSCI中国A股国际中小盘MSCIMSCI规模指数NoneNaNNone1801002.SI申万中小板SW申万研究其他200407051000.0None874SPHCMSHP.SPI标普香港上市中国中小盘精选指数OTH标准普尔公司其他NoneNaNNone

482 rows × 8 columns

有了指数代码,就可以获得指数日线数据了


index_code = df_info.iloc[0]['ts_code']
df = pro.index_daily(ts_code=index_code)
df.rename(columns={'vol': 'vol(手)', 'amount': 'amount(千元)'}, inplace=True)
df

ts_codetrade_datecloseopenhighlowpre_closechangepct_chgvol(手)amount(千元)0000046.SH202104304460.15214482.30294482.30294431.38034502.2544-42.1023-0.93511.531943e+081.799518e+081000046.SH202104294502.25444486.19594507.03114466.09254486.347315.90710.35461.327776e+081.583016e+082000046.SH202104284486.34734443.22794486.34734430.39214450.530535.81680.80481.131329e+081.410433e+083000046.SH202104274450.53054446.03624460.28834412.10654449.31801.21250.02731.191778e+081.397632e+084000046.SH202104264449.31804490.22664526.97744446.67324479.6079-30.2899-0.67621.350744e+081.692510e+08………………………………3963000046.SH20050110835.8030828.6420835.8030825.4270829.30406.49900.78373.249806e+062.089842e+063964000046.SH20050107829.3040825.9590838.8730824.4510826.89702.40700.29114.056519e+062.608160e+063965000046.SH20050106826.8970834.6070834.6070824.4180834.2200-7.3230-0.87783.561436e+062.180104e+063966000046.SH20050105834.2200822.2770836.8670821.9170822.686011.53401.40203.827764e+062.440814e+063967000046.SH20050104822.6860832.4610832.4610821.3520NaNNaNNaN2.765870e+061.752842e+06

3968 rows × 11 columns

Original: https://blog.csdn.net/hamagudu/article/details/116308173
Author: hamagudu
Title: 在 DataFrame 多列数据中模糊查找匹配数据

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/677403/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球