gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 02:21:36 24 4
gpt4 key购买 nike

我正在尝试从 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com