为什么我不能从函数中获取Pandas单元的类型?

时间:2017-12-11 20:26:22

标签: python pandas

我想获得我传递给函数的参数类型(我认为它是一个Pandas Series,但我想确定)并写入Pandas Dataframe中的新列。为什么这个

data = np.array([['','Col1','Col2', 'Col3'],
                ['Row1','cd, d', '1, 2', 'ab; cd'],
                ['Row2','e, f', '5, 6', 'ef; gh'],
                ['Row3','a, b', '3, 4', 'ij; kl']])

df = pd.DataFrame(data=data[1:,1:],
                  index=data[1:,0],
                  columns=data[0,1:])

def find_type(my_arg):
    return type(my_arg)

df['types'] = find_type(df['Col1'])

给我

AttributeError: 'int' object has no attribute 'index'

什么是正确的方法呢?

3 个答案:

答案 0 :(得分:3)

您正在寻找pandas.DataFrame.dtypes

>>> df.dtypes
Col1    object
Col2    object
Col3    object
dtype: object

>>> dict(df.dtypes)
{'Col1': dtype('O'), 'Col2': dtype('O'), 'Col3': dtype('O')}

>>> df['Col1'].dtypes
dtype('O')

如果您执行type(df['Col1']),Python会告诉您类型为pandas.core.series.Series,这不是特别有用。您需要确定列中存储的数据类型,而不是列实现为一系列。

答案 1 :(得分:3)

如果这有帮助,数据框的列(系列)具有像float64,int32或object这样的dtype,其中object基本上是非数字的字符串,如字符串。

除此之外,细胞还可以具有类型。如果dtype是某种int或float,那么单元格也将是int或float。如果dtype是object,那么单元格可以是任何东西,包括混合类型。

以下是一个例子:

>>> df=pd.DataFrame({'a':[1.1,2.2],'b':[1,2],
                     'c':['cat','dog'],'d':['rat',3]})

>>> df.dtypes

a    float64
b      int64
c     object
d     object
dtype: object

>>> df.applymap(type)

                 a              b              c              d
0  <class 'float'>  <class 'int'>  <class 'str'>  <class 'str'>
1  <class 'float'>  <class 'int'>  <class 'str'>  <class 'int'>

我不确定这是否有用或者您正在尝试做什么,但我找不到一个简单的解释,以便链接到这一点,我想快速写下来。

答案 2 :(得分:0)

data = np.array([['','Col1','Col2', 'Col3'],
                ['Row1','cd, d', '1, 2', 'ab; cd'],
                ['Row2','e, f', '5, 6', 'ef; gh'],
                ['Row3','a, b', '3, 4', 'ij; kl']])

df = pd.DataFrame(data=data[1:,1:],
                  index=data[1:,0],
                  columns=data[0,1:])

def find_type(my_arg):
    return type(my_arg)

df['types'] = df['Col1'].map(find_type)