为什么 pd.concat 将结果类型从 int 更改为 object?

6 python types concatenation dataframe pandas

我正在用 Pandas 解析几个 csv 文件并将它们连接成一个大数据框。然后,我想groupby计算mean().

这是一个示例数据框:

df1.head()

   Time  Node  Packets
0     1     0        0
2     1     1        0
4     1     2        0
6     1     3        0
8     1     4        0
Run Code Online (Sandbox Code Playgroud)

df1.info(verbose=True)

<class 'pandas.core.frame.DataFrame'>
Int64Index: 27972 entries, 0 to 55942
Data columns (total 3 columns):
Time       27972 non-null int64
Node       27972 non-null int64
Packets    27972 non-null int64
dtypes: int64(3)
memory usage: 874.1 KB
None
Run Code Online (Sandbox Code Playgroud)

然后我将它们连接起来(为了简单起见,三个数据帧)

df_total = pd.concat([df1, df2, df3])
Run Code Online (Sandbox Code Playgroud)

df_total.info(verbose=True)结果是

<class 'pandas.core.frame.DataFrame'>
Int64Index: 83916 entries, 0 to 55942
Data columns (total 3 columns):
Time       83916 non-null object
Node       83916 non-null object
Packets    83916 non-null object
dtypes: object(3)
memory usage: 2.6+ MB
None
Run Code Online (Sandbox Code Playgroud)

最后,我尝试:

df_total = df_total.groupby(['Time'])['Packets'].mean()
Run Code Online (Sandbox Code Playgroud)

这就是错误pandas.core.base.DataError: No numeric types to aggregate出现的地方。

虽然我从其他帖子中了解到Pandas由于 而改变,但我无法使用建议的解决方案解决我的问题。dtypenon-null

我该如何解决?

小智 0

 df_total.info(verbose=True)
Run Code Online (Sandbox Code Playgroud)

您的 this 语句将信息作为对象提供,因此连接时存在问题,每个值都不是 int,因此对象的平均值是不可能的。