我想获得我传递给函数的参数类型(我认为它是一个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'
什么是正确的方法呢?
答案 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)