python - 无法将对象类型转换为字符串;然后过滤该字符串; python pandas 数据框

标签 python pandas

我正在尝试从 NYSE 提取所有股票行情,然后仅筛选出市值高于 5B 的股票。

我遇到了一个问题,因为根据我的数据加载方式,所有列都是数据类型“对象”,而且我无论如何都找不到将它们转换为其他任何内容的方法。请参阅下面我的代码和评论:

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 的任何内容。但是我认为它是因为数据类型是“对象”而不是字符串,我无法直接执行此操作。因此,我创建了仅包含字母或数字的新列,希望随后可以转换为数据类型字符串并从那里 float 。

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、类型函数,但没有成功。

我的过滤代码将是:

df[df.Billion_Filter.str.contains("B")]

但是当我运行时没有任何反应,没有错误,但也没有过滤器发生。当我在不同的表上运行此代码时,它可以工作,因此它一定是对象数据类型支撑着它。

最佳答案

首先删除美元符号,然后用 e9M 替换 B,将 MarketCap 列转换为 float > 与e6。这将使您可以轻松地在列上使用 .astype(float) 进行转换。

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)

df = df.replace({'MarketCap': {'\$': '', 'B': 'e9', 'M': 'e6', 'n/a': np.nan}}, regex=True)
df.MarketCap = df.MarketCap.astype(float)

print(df[df.MarketCap > 5000000000].head(10))

产量:

           MarketCap             Sector                                         industry
Symbol
MMM     1.419900e+11        Health Care                       Medical/Dental Instruments
WUBA    1.039000e+10         Technology  Computer Software: Programming, Data Processing
ABB     5.676000e+10  Consumer Durables                              Electrical Products
ABT     9.887000e+10        Health Care                            Major Pharmaceuticals
ABBV    1.563200e+11        Health Care                            Major Pharmaceuticals
ACN     9.388000e+10      Miscellaneous                                Business Services
AYI     7.240000e+09  Consumer Durables                                Building Products
ADNT    7.490000e+09      Capital Goods                                Auto Parts:O.E.M.
AAP     7.370000e+09  Consumer Services                           Other Specialty Stores
ASX     1.083000e+10         Technology                                   Semiconductors

关于python - 无法将对象类型转换为字符串;然后过滤该字符串; python pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47909152/

相关文章:

python - 根据月份、年份将 n x 1 数据框转换为 a x b 大小的网格

python - Matplotlib 行集合和附加行

python - 如何在列表理解中改变字典的值

python - super() 的第二个参数?

python - 有没有一种使用 Pygame 制作和保存动画的简单方法?

python - 删除 nan 行,除非单独列中的字符串值 - Pandas

python - 如何添加交错行作为排序/组的结果?

python - 如何使用 easy_install 安装 Pandas ?

Python if 语句没有按预期工作

python - 如何使用 tensorflow 在推理阶段加载移动平均权重变量