pandas - 为什么按结果分组的 pandas 输出中缺少列名称?

标签 pandas

更新

如果使用to_frame(),列名似乎不在同一行

            重量
型号
HG-R2075  2040
HG220      680

这是我的代码,它将“型号”(这意味着类型)分组,并获取“重量”(重量)的总和并排除该列("是否发送"),其中包含一个值。

import pandas as pd
import numpy as np
import sys
import os
script_dir = os.path.dirname(os.path.abspath(__file__))
os.chdir(script_dir ) # change to the path that you already know

try:
   ClientName = sys.argv[1]
except :
   print(u'没有输入或者错误的客户名称!')

df = pd.read_excel("Summary.xlsm")
df = df[df['客户'].str.contains(ClientName)][pd.isnull(df[u"是否已经发送"])].groupby([ u'型号'])[u'重量'].sum()
print('[CQ:face,id=21] ' + '*' * 10 + u'以下是' + ClientName + u'未发送的重量' + '*' * 10 + '[CQ:face,id=21]')
print(str(df))

输出是这样的:

[CQ:face,id=21] **********以下是KATUN未发送的重量**********[CQ:face,id=
21]
型号        (****the column name is missing here*****)
HG-R2075    2040
HG220        680
Name: 重量, dtype: int64 

不知道为什么缺少列名?

我想要的输出是这样的:如何制作?

型号        重量
HG-R2075    2040
HG220        680
Name: 重量, dtype: int64 

最佳答案

groupby 操作的结果 df 实际上是一个 Series,而不是 DataFrame。这就是为什么它以不同的格式打印。

print(df.to_frame()) 应该能解决问题。

编辑:实际上在这样的数据框中索引名称和列名称不会打印在同一行上。要获得更清晰的输出,请使用 reset_index 获取 2 个正确的列:

print(df.reset_index().to_string(index=False))

关于pandas - 为什么按结果分组的 pandas 输出中缺少列名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44871098/

相关文章:

python - 如何在 Windows 上安装 numpy 和 pandas

python - 使用 Python 通过独特的 header 打印技术(.inp 扩展名)从文件中解析 header 字符串

python - 在由 True,False 填充的 pandas df 中创建新列,具体取决于浮点列是否为整数 (`float.is_integer` )

python - 使用 pandas 合并两个数据框

python - 逐个构建 DataFrame 的最快方法是什么?

python - 迭代数据帧并替换为另一个数据帧中的值

python - Pandas :根据条件计算特定日期以来时间序列的百分比变化

python - 基于数据框过滤数据透视表

python - 简单的 bs4 脚本到 pandas df

python - 如何在多索引中插入缺失的行