【发布时间】:2017-12-20 15:14:47
【问题描述】:
我正在尝试从 NYSE 提取所有股票代码,然后仅过滤掉那些市值高于 5B 的股票。
我遇到了一个问题,因为根据我的数据加载在所有列中的方式是数据类型“对象”,我无论如何都找不到将它们转换为其他任何内容。请参阅下面的代码和 cmets:
import pandas as pd
import numpy as np
# NYSE
url_nyse = "http://www.nasdaq.com/screening/companies-by-name.aspx?letter=0&exchange=nyse&render=download"
df = pd.DataFrame.from_csv(url_nyse)
df = df.drop(df.columns[[0, 1, 3, 6,7]], axis=1)
这是我对 NYSE 股票的初始数据加载,然后我只过滤 MarketCap、Sector 和 Industry。
起初我希望首先通过删除带有“M”的任何内容来过滤掉 MarketCap,然后删除第一个和最后一个字符以获得一个数字,然后可以过滤该数字以保持任何高于 5 的内容。但是我认为它是因为数据类型是“对象”而不是字符串,我无法直接做到这一点。所以我创建了只包含字母或数字的新列,希望我可以转换为数据类型字符串并从那里浮动。
df['MarketCap_Num'] = df.MarketCap.str[1:-1]
df['Billion_Filter'] = df.MarketCap.str[-1:]
所以 MarketCap_Num 列只有通过删除第一个和最后一个字符的数字,而 Billion_Filter 只是我将删除 = M 的任何值的最后一个字符。
但是,即使这些列只是数字或字符串,我无论如何也找不到从对象数据类型转换为更改,所以我的过滤根本不起作用。非常感谢任何帮助。
我试过 .astype(float), pd.to_numeric, type functions 都没有成功。
我的过滤代码将是:
df[df.Billion_Filter.str.contains("B")]
但是当我运行时没有任何反应,没有错误,也没有过滤器发生。当我在不同的表上运行此代码时,它可以工作,所以它必须是对象数据类型。
【问题讨论】: