Pandas数据框列在字符串(即“ float”)内浮动为int

时间:2018-07-19 22:49:45

标签: string pandas floating-point int conditional

我正在尝试清除pandas df中的一些数据,并且希望'volume'列从floatint。 编辑:主要问题是我正在查看的float变量的dtype实际上是一个str。因此,首先需要将其浮动,然后再进行更改。 我删除了我正在考虑的其他两个解决方案,并保留了我曾经使用过的解决方案。顶部的是有错误的一个,而底部的是解决方案。

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

下面是修改后的代码:

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

1 个答案:

答案 0 :(得分:0)

您在这里遇到一些问题。

在第一个示例中,iloc仅接受DataFrame中行和列的整数位置,这会生成错误。即

tick.iloc[:,['volume']].astype(int)

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

tick.loc[:,['volume']].astype(int)

或者,使用基于括号的索引,该索引使您可以直接获取整列,而无需在行上使用切片语法(:):

tick['volume'].astype(int)

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

tick['volume'] = tick['volume'].astype(int)

由于您的dtype是数字检查,所以您不想检查== np.number,但是也不想检查is,如果返回的话,它只会返回True np.number,而不是np.int64这样的子类。使用np.issubdtypepd.api.types.is_numeric_dtype,即:

if np.issubdtype(tick['volume'].dtype, np.number):

或:

if pd.api.types.is_numeric_dtype(tick['volume'].dtype):