首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Pandas dataframe列在字符串内的浮点数(即" float ")为int

Pandas dataframe列在字符串内的浮点数(即" float ")为int
EN

Stack Overflow用户
提问于 2018-07-20 06:49:45
回答 1查看 1.4K关注 0票数 1

我正在尝试清理pandas df中的一些数据,并且我希望‘float’列从卷变成int。编辑:主要问题是我所查看的float变量的数据类型实际上是一个str。因此,首先需要将其浮动,然后才能更改。我删除了我正在考虑的另外两个解决方案,并保留了我使用的那个。上面的是有错误的,下面的是解决方案。

代码语言:javascript
复制
import pandas as pd
import numpy as np
 #Call the df
t_df = pd.DataFrame(client.get_info())

#isolate only the 'symbol' column in t_df    
tickers = t_df.loc[:, ['symbol']]


def tick_data(tickers):
   for i in tickers:
       tick_df = pd.DataFrame(client.get_ticker())
       tick = tick_df.loc[:, ['symbol', 'volume']]
       tick.iloc[:,['volume']].astype(int)

       if tick['volume'].dtype != np.number:
           print('yes')
       else:
           print('no')
return tick

以下是修改后的代码:

代码语言:javascript
复制
import pandas as pd
#Call the df


def ticker():
    t_df = pd.DataFrame(client.get_info())
    #isolate only the 'symbol' column in t_df    
    tickers = t_df.loc[:, ['symbol']]

    for i in tickers:
        #pulls out market data for each symbol
        tickers = pd.DataFrame(client.get_ticker())
        #isolates the symbol and volume
        tickers = tickers.loc[:, ['symbol', 'volume']]
        #floats volume
        tickers['volume'] = tickers.loc[:, ['volume']].astype(float)
        #volume to int
        tickers['volume'] = tickers.loc[:, ['volume']].astype(int)
        #deletes all symbols > 20,000 in volume, returns only symbol
        tickers = tickers.loc[tickers['volume'] >= 20000, 'symbol']        
return tickers
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-20 07:13:09

您在这里有一些问题。

在第一个示例中,iloc只接受DataFrame中的行和列的整数位置,这会生成错误。也就是说。

代码语言:javascript
复制
tick.iloc[:,['volume']].astype(int)

不起作用。如果需要基于标签的索引,请使用.loc

代码语言:javascript
复制
tick.loc[:,['volume']].astype(int)

或者,使用基于方括号的索引,它允许您直接获取整个列,而无需对行使用切片语法(:):

代码语言:javascript
复制
tick['volume'].astype(int)

接下来,astype(int)返回一个新值,它不会就地修改。所以你想要的是

代码语言:javascript
复制
tick['volume'] = tick['volume'].astype(int)

至于你的数据类型是一个数字检查,你不想检查== np.number,但你也不想检查is,它只在为np.number时返回True,如果它是像np.int64这样的子类则不返回。使用np.issubdtypepd.api.types.is_numeric_dtype,即:

代码语言:javascript
复制
if np.issubdtype(tick['volume'].dtype, np.number):

或者:

代码语言:javascript
复制
if pd.api.types.is_numeric_dtype(tick['volume'].dtype):
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51432720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档