检查数据帧中的列是否为整数,然后执行操作

时间:2017-07-14 19:33:29

标签: pandas

检查数据帧中的列是否为整数,如果是整数,则必须乘以10

import numpy as np
import pandas as pd
df = pd.dataframe(....)    
#function to check and multiply if a column is integer
def xtimes(x): 
  for col in x:
    if type(x[col]) == np.int64:
        return x[col]*10
    else:
        return x[col]
#using apply to apply that function on df
df.apply(xtimes).head(10)

我收到的错误('GP','发生在索引学校')

2 个答案:

答案 0 :(得分:3)

您可以使用select_dtypes获取数字列,然后乘以。

In [1284]: df[df.select_dtypes(include=['int', 'int64', np.number]).columns] *= 10

您可以拥有include=[... np.int64, ..., etc]

的特定检查清单

答案 1 :(得分:2)

您可以使用dtypes属性和loc

df.loc[:, df.dtypes <= np.integer] *= 10

<强>解释
pd.DataFrame.dtypes返回pd.Series个numpy dtype对象。我们可以使用比较运算符来确定subdtype状态。有关numpy.dtype层次结构,请参阅https://www.postgresql.org/docs/9.6/static/pgtrgm.html

演示

考虑数据框df

df = pd.DataFrame([
    [1, 2, 3, 4, 5, 6],
    [1, 2, 3, 4, 5, 6]
]).astype(pd.Series([np.int32, np.int16, np.int64, float, object, str]))

df

   0  1  2    3  4  5
0  1  2  3  4.0  5  6
1  1  2  3  4.0  5  6

dtypes

df.dtypes

0      int32
1      int16
2      int64
3    float64
4     object
5     object
dtype: object

我们要更改列012
方便地

df.dtypes <= np.integer

0     True
1     True
2     True
3    False
4    False
5    False
dtype: bool

这使我们能够在loc作业中使用它。

df.loc[:, df.dtypes <= np.integer] *= 10

df

    0   1   2    3  4  5
0  10  20  30  4.0  5  6
1  10  20  30  4.0  5  6