[英]Pandas: ignore all lines following a specific string when reading a file into a DataFrame
[英]Ignore lines in pandas DataFrame
我有一个名为reassembly的列表,其组织方式如下:
['AFLT', 228468.0, 'B'],
['TATN', 1108.6, 'B'],
['TATN', 4434.4, 'B'],
['MOEX', 3480.0, 'S'],
['YNDX', 5934.0, 'B'],
['MTSS', 36003.0, 'S'],
['SBERP', 33837.1, 'S'],
['SBERP', 1780.8, 'S'],
['MTSS', 3273.0, 'S'],
['AFLT', 124356.0, 'B'],
['AFLT', 20244.0, 'B'],
['MGNT', 72990.0, 'B'],
['NLMK', 230917.0, 'B'],
['NLMK', 156050.0, 'B'],
['NLMK', 31220.0, 'B'],
['MGNT', 36450.0, 'S'],
['TCSG', 14045.2, 'S'],
['TCSG', 2160.4, 'S'],
还有一个字典叫做中位数与数据:
{'TATNP': 11968.05, 'TCSG': 8647.2, 'TRNFP': 130250.0, 'UPRO': 7941.0, 'VTBR': 3828.28, 'YNDX': 17660.4}
字典中的键等价于列表中的第一个值('AFLT'、'VTBR' 等)
我将重组转换为 pandas:
df = pd.DataFrame(reassembly, columns=['ticker','vol','operation'])
现在我想做这样的事情:
df = df[df['vol'] < median['ticker']]
我的意思是如果这个股票代码的 vol < 中位数应该忽略它。
请帮助我正确编写此代码。
你想要map
:
high_volumes = df[df['vol'] > df['ticker'].map(medians)]
# do suff with high volume transaction
请注意,如果您没有中medians
的所有tickers
,上述操作可能会失败。 在这种情况下,假设您想保留所有tickers
中medians
的代码:
meds = df['ticker'].map(medians)
high_volumes = df[(df['vol']>meds)|(meds.isna())]
df = df[df['vol'] > df['ticker'].map(median)]
我建议用列表理解来解决这个问题,然后 pipe 将结果转换为熊猫。
reassembly = [['AFLT', 228468.0, 'B'],
['TATN', 1108.6, 'B'],
['TATN', 4434.4, 'B'],
['MOEX', 3480.0, 'S'],
['YNDX', 5934.0, 'B'],
['MTSS', 36003.0, 'S'],
['SBERP', 33837.1, 'S'],
['SBERP', 1780.8, 'S'],
['MTSS', 3273.0, 'S'],
['AFLT', 124356.0, 'B'],
['AFLT', 20244.0, 'B'],
['MGNT', 72990.0, 'B'],
['NLMK', 230917.0, 'B'],
['NLMK', 156050.0, 'B'],
['NLMK', 31220.0, 'B'],
['MGNT', 36450.0, 'S'],
['TCSG', 14045.2, 'S'],
['TCSG', 2160.4, 'S']]
medians = {'TATNP': 11968.05, 'TCSG': 8647.2, 'TRNFP': 130250.0, 'UPRO': 7941.0, 'VTBR': 3828.28, 'YNDX': 17660.4}
ready_for_panda = [x for x in reassembly if x[0] in medians and x[1] > medians[x[0]]]
pd.DataFrame(ready_for_panda, columns=["ticker", "vol", "operation"])
ticker vol operation
TCSG 14045.2 S
我假设您想从重组中过滤掉任何体积小于此股票代码当前中值的元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.