Groupby包含object与datetime64[ns]类型为何返回空DataFrame?
GroupBy求和后得到空DataFrame的原因及解决办法
你的数据与操作情况
DataFrame数据类型
print(df.dtypes) # 输出: Daten float64 timepoint datetime64[ns] Level object Sublevel object dtype: object
数据内容
Daten timepoint Level Sublevel 1 2019-01-01T00:00:00.000 A AA 1 2019-01-01T00:00:00.000 A AA 2 2019-01-01T00:00:00.000 A AB 2 2019-01-01T00:00:00.000 B BA 1 2019-02-01T00:00:00.000 A AA
执行的分组代码
df= df.groupby( ['Level', 'timepoint']).agg({'Daten': 'sum'}).reset_index()
预期输出
timepoint Level Daten 2019-01-01T00:00:00.000 A 4 2019-01-01T00:00:00.000 B 2 2019-02-01T00:00:00.000 A 1
可能的原因及解决办法
1. 列名存在隐藏空格
从你给出的数据内容来看,列名(比如Daten、Level)的前后可能存在空格,导致groupby时无法匹配到正确的列。可以先清理列名:
df.columns = df.columns.str.strip()
2. 原DataFrame已被意外清空
如果在执行groupby之前,你对df做过筛选、删除行等操作导致数据为空,结果自然是空DataFrame。可以先执行以下代码确认原数据状态:
print(df.shape) # 查看行数和列数 print(df.head()) # 查看前几行数据
3. 分组列存在异常值
虽然你显示timepoint是datetime64[ns]类型,但如果实际数据中存在无法解析的日期值,可能导致分组异常。可以检查并修复日期列:
# 检查日期列是否有缺失值 print(df['timepoint'].isna().sum()) # 重新格式化日期,将无效值转为NaN df['timepoint'] = pd.to_datetime(df['timepoint'], errors='coerce') # 过滤掉日期为空的行 df = df.dropna(subset=['timepoint'])
修正后的完整代码示例
import pandas as pd # 模拟你的原始数据 data = { 'Daten': [1, 1, 2, 2, 1], 'timepoint': [ '2019-01-01T00:00:00.000', '2019-01-01T00:00:00.000', '2019-01-01T00:00:00.000', '2019-01-01T00:00:00.000', '2019-02-01T00:00:00.000' ], 'Level': ['A', 'A', 'A', 'B', 'A'], 'Sublevel': ['AA', 'AA', 'AB', 'BA', 'AA'] } df = pd.DataFrame(data) df['timepoint'] = pd.to_datetime(df['timepoint']) # 清理列名(处理可能的空格问题) df.columns = df.columns.str.strip() # 执行分组求和并调整列顺序 df = df.groupby(['Level', 'timepoint']).agg({'Daten': 'sum'}).reset_index() df = df[['timepoint', 'Level', 'Daten']] # 输出结果 print(df)
执行后输出与你的预期一致:
timepoint Level Daten 0 2019-01-01 00:00:00 A 4 1 2019-01-01 00:00:00 B 2 2 2019-02-01 00:00:00 A 1
内容的提问来源于stack exchange,提问作者PV8
相关产品推荐
相关产品推荐

