我正在遇到一些与熊猫系列有点令人沮丧的事情。我有一个包含多个列的DataFrame,包含数字和非数字数据。但是,出于某种原因,pandas认为某些 numeric 列是非数字的,当我尝试运行像.describe()
这样的聚合函数时会忽略它们。这是一个问题,因为当我尝试在这些列上运行分析时,pandas会引发错误。
我从终端复制了一些命令作为例子。当我对'ND_Offset'列(有问题的列)进行切片时,pandas会将其标记为object
的dtype。然而,当我调用.describe()
时,pandas会用dtype float64
标记它(它应该是什么)。另一方面,“Dwell”列完全按照预期运行,pandas两次都提供float64
。
有谁知道我为什么会这样做?
In [83]: subject.phrases['ND_Offset'][:3]
Out[83]:
SubmitTime
2014-06-02 22:44:44 0.3607049
2014-06-02 22:44:44 0.2145484
2014-06-02 22:44:44 0.4031347
Name: ND_Offset, dtype: object
In [84]: subject.phrases['ND_Offset'].describe()
Out[84]:
count 1255.000000
unique 432.000000
top 0.242308
freq 21.000000
dtype: float64
In [85]: subject.phrases['Dwell'][:3]
Out[85]:
SubmitTime
2014-06-02 22:44:44 111
2014-06-02 22:44:44 81
2014-06-02 22:44:44 101
Name: Dwell, dtype: float64
In [86]: subject.phrases['Dwell'].describe()
Out[86]:
count 1255.000000
mean 99.013546
std 30.109327
min 21.000000
25% 81.000000
50% 94.000000
75% 111.000000
max 291.000000
dtype: float64
当我使用.groupby
函数按另一个属性对数据进行分组时(当这些Series是DataFrame的一部分时),当我尝试调用{{1时}时出现DataError: No numeric types to aggregate
错误在组上。另一方面,当我尝试在同一数据上调用.agg(np.mean)
时,情况正常。
这有点奇怪 - 任何人都可以解释发生了什么吗?
谢谢!
答案 0 :(得分:0)
可能是因为ND_Offset
列(我在下面称之为A
)包含非数字值,例如空字符串。例如,
import numpy as np
import pandas as pd
df = pd.DataFrame({'A': [0.36, ''], 'B': [111, 81]})
print(df['A'].describe())
# count 2.00
# unique 2.00
# top 0.36
# freq 1.00
# dtype: float64
try:
print(df.groupby(['B']).agg(np.mean))
except Exception as err:
print(err)
# No numeric types to aggregate
print(df.groupby(['B']).agg(np.sum))
# A
# B
# 81
# 111 0.36
使用np.sum
进行汇总是有效的,因为
In [103]: np.sum(pd.Series(['']))
Out[103]: ''
而np.mean(pd.Series(['']))
提出
TypeError: Could not convert to numeric
要调试问题,您可以尝试使用以下方法查找非数字值:
for val in df['A']:
if not isinstance(val, float):
print('Error: val = {!r}'.format(val))