如何在迭代 pandas 分组 df 时修复 ValueError?
Posted
技术标签:
【中文标题】如何在迭代 pandas 分组 df 时修复 ValueError?【英文标题】:How to fix ValueError in iterating pandas grouped df? 【发布时间】:2019-08-25 19:04:29 【问题描述】:由于值错误,无法迭代 pandas 数据帧的分组值。
我考虑的df是,
df:
class section sub marks school city
0 I A Eng 80 jghss salem
1 I A Mat 90 jghss salem
2 I A Eng 50 jghss salem
3 III A Eng 80 gphss salem
4 III A Mat 45 gphss salem
5 III A Eng 40 gphss salem
6 III A Eng 20 gphss salem
7 III A Mat 55 gphss salem
为了将列的值(即“sub”和“marks”)分组为列表,我使用过,
df_grp = df.groupby(['class','section','school','city']).agg(lambda x: list(x))
df_grp 是,
class section school city sub marks
I A jghss salem [Eng, Mat, Eng] [80, 90, 50]
III A gphss salem [Eng, Mat, Eng, Eng, Mat] [80, 45, 40, 20, 55]
现在我需要迭代 df_grp,以便提取所有列的值,例如
Row 1:-
class = I
section = A
school = jghss
city = salem
sub = [Eng, Mat, Eng]
marks = [80, 90, 50]
Row 2:-
class = III
section = A
school = gphss
city = salem
sub = [Eng, Mat, Eng, Eng, Mat]
marks = [80, 45, 40, 20, 55]
现在迭代 df_grp 以提取列值,我已经使用了
for index,group in df_grp:
for subIndex, row in group.iterrows():
sub = row['sub']
marks = row['marks']
当我使用它时,它会返回
ValueError: too many values to unpack (expected 2)
【问题讨论】:
我已经尝试过 for index, group in data_df_grp.groupby(['class','section','school','city']): & for index,row in group.iterrows( ): 你能定义data_df_grp
吗?
参考“***.com/questions/27405483/…”
@amannagariya,我也试过了,它返回 ValueError
【参考方案1】:
import pandas as pd
df1 = pd.DataFrame(
'atable': ['Users', 'Users', 'Domains', 'Domains', 'Locks'],
'column': ['col_1', 'col_2', 'col_a', 'col_b', 'col'],
'column_type':['varchar', 'varchar', 'int', 'varchar', 'varchar'],
'is_null': ['No', 'No', 'Yes', 'No', 'Yes'],
)
df1_grouped = df1.groupby('atable').agg(lambda x: list(x))
for row in df1_grouped.iterrows():
print(row[1].column)
这里是一个例子,它会返回第一列数据
groupby 方法已经返回一个数据帧,你不能再次循环它。
【讨论】:
以上是关于如何在迭代 pandas 分组 df 时修复 ValueError?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Python Pandas 中扩展存储为单个值的可迭代对象? (又名反向分组)[重复]