【问题标题】:Simple Pandas DataFrame read_csv then GroupBy with Count / KeyError简单的 Pandas DataFrame read_csv 然后 GroupBy 与 Count / KeyError
【发布时间】:2021-05-26 09:33:07
【问题描述】:

我只是想获取给定列中值的行数,例如:

CSV 数据:

'Occupation','data'
'Carpenter','data1'
'Carpenter','data2'
'Carpenter','data3'
'Painter','data1'
'Painter','data2'
'Programmer','data1'
'Programmer','data2'
'Programmer','data3'
'Programmer','data4'

计划:

filename = "./data/TestGroup.csv"

df = pd.read_csv(filename)
print(df.head())

print("Computing stats by HandRank... ")
df_stats = df[['data']].groupby(['Occupation']).agg(['count'])
# also tried:  df_stats = df[['Occupation']].groupby(['Occupation']).agg(['count'])
print(df_stats.head())

如何获取变量中的计数? .groupby 和 .agg 是否返回另一个数据帧?

输出/错误:

  'Occupation'   'data'
0  'Carpenter'  'data1'
1  'Carpenter'  'data2'
2  'Carpenter'  'data3'
3    'Painter'  'data1'
4    'Painter'  'data2'
    Computing stats by HandRank... 
    Traceback (most recent call last):
      File "C:\Apps\PokerHandGenerator_Copy_not_Source\Server\TestPandasGroupBy.py", line 17, in <module>
        df_stats = df.groupby(['Occupation']).agg(['count'])
      File "C:\Apps\ProcessData\venv\lib\site-packages\pandas\core\frame.py", line 6714, in groupby
        return DataFrameGroupBy(
      File "C:\Apps\ProcessData\venv\lib\site-packages\pandas\core\groupby\groupby.py", line 560, in __init__
        grouper, exclusions, obj = get_grouper(
      File "C:\Apps\ProcessData\venv\lib\site-packages\pandas\core\groupby\grouper.py", line 811, in get_grouper
        raise KeyError(gpr)
    KeyError: 'Occupation'

df.head() 显示它使用“职业”作为我的列名。

【问题讨论】:

  • 更多相同: KeyError: ('Occupation', 'data') 我需要两个括号还是一个,两种方法都试过了......我们在 .group by 之前指定了什么?为什么不只是 df.groupby....?
  • 让我们试试df[['Occupation', 'data']].groupby(['Occupation']).agg(['count']) 基本原理是,我们正在调用列列表并将它们分组。 df[['data']] 产生一个系列并丢失列占用。因此,如果您知道我的意思,您正在对不存在的列应用计数
  • 尝试运行 df[['Occupation', 'data']]df[['data']]。一个是数据框,另一个是系列或单列
  • KeyError: "[Index(['Occupation', 'data'], dtype='object')] 都不在 [columns] 中"
  • 从下面的 Anurag Dabas 获得解决方案。

标签: pandas dataframe counting


【解决方案1】:

Pandas 将第一列视为“职业”而不是职业。

使用这个:-

df_stats = df.groupby("'Occupation'").agg(['count'])

而不是使用这个:-

df_stats = df[['data']].groupby(['Occupation']).agg(['count'])

【讨论】:

  • df_stats = df.groupby('Occupation').agg(['count']) 给出同样的错误:KeyError: 'Occupation'
  • 哦,我明白了您面临的问题是什么...现在再次检查我编辑的解决方案
  • 谢谢,是的:"df_stats = df.groupby("'Occupation'").agg(['count'])" 有效! print("Version of Pandas:", pd. version) 给出 1.2.1 我在 Anaconda 下为这个程序运行 PyCharm。可能是时候更新图书馆了!那么这个额外的报价完成了什么? groupby("'Occupation'") 而不是 groupby('Occupation')
  • 是的,这是因为您有一个包含在single quotes' 中的列,所以您的列是'Occupation' 而不是Occupation 这就是groupby("'Occupation'") 有效而groupby('Occupation') 无效的原因
  • 顺便说一句,不需要更新pandas....或者如果你想更新,那么你可以......因为我正在使用pandas 1.1.4,我目前没有遇到任何问题
猜你喜欢
  • 2021-10-04
  • 2021-05-26
  • 1970-01-01
  • 1970-01-01
  • 2021-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多