Pandas 排序文件并对值进行分组
Pandas Sort File and group up values
我正在学习 pandas,但遇到了一些问题。
我将数据导入为 DataFrame,并希望将 2017 年的人口值分为四个大小相等的组。
并统计group4
的个数
然而系统打印出来:
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-52-05d9f2e7ffc8> in <module>
2
3 df=pd.read_excel('C:/Users/Sam/Desktop/商業分析/Python_Jabbia1e/Chapter 2/jaggia_ba_1e_ch02_Data_Files.xlsx',sheet_name='Population')
----> 4 df=df.sort_values('2017',ascending=True)
5 df['Group'] = pd.qcut(df['2017'], q = 4, labels = range(1, 5))
6 splitData = [group for _, group in df.groupby('Group')]
C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\frame.py in sort_values(self, by, axis, ascending, inplace, kind, na_position, ignore_index, key)
5453
5454 by = by[0]
-> 5455 k = self._get_label_or_level_values(by, axis=axis)
5456
5457 # need to rewrap column in Series to apply key function
C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\generic.py in _get_label_or_level_values(self, key, axis)
1682 values = self.axes[axis].get_level_values(key)._values
1683 else:
-> 1684 raise KeyError(key)
1685
1686 # Check for duplicates
KeyError: '2017'
怎么了?
谢谢~
这是数据框:
我试过了:
df=pd.read_excel('C:/Users/Sam/Desktop/商業分析/Python_Jabbia1e/Chapter 2/jaggia_ba_1e_ch02_Data_Files.xlsx',sheet_name='Population')
df=df.sort_values('2017',ascending=True)
df['Group'] = pd.qcut(df['2017'], q = 4, labels = range(1, 5))
splitData = [group for _, group in df.groupby('Group')]
print('The number of group4 is :',splitData[3].shape[0])
首先,您在第 4 行的排序有问题,您告诉排序函数查找字符串 2017,但它是整数。试试这个然后继续你的代码:
df=df.sort_values([2017],ascending=True)
您正在将 df.sort_values()
的密钥作为 str
插入。您可以将其作为列表中的元素提供,也可以不提供。
df = df.sort_values(by=['2017'], ascending=True)
或
df = df.sort_values(by='2017', ascending=True)
这仅在列值与您传递的字符串完全匹配时有效。如果它不是一个字符串或者如果该字符串包含一些空格,它将不起作用。您可以在排序前删除任何尾随空格,
df.columns = df.columns.str.strip()
如果它不是您应该使用的字符串,
df = df.sort_values(by=[2017], ascending=True)
我正在学习 pandas,但遇到了一些问题。 我将数据导入为 DataFrame,并希望将 2017 年的人口值分为四个大小相等的组。 并统计group4
的个数然而系统打印出来:
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-52-05d9f2e7ffc8> in <module>
2
3 df=pd.read_excel('C:/Users/Sam/Desktop/商業分析/Python_Jabbia1e/Chapter 2/jaggia_ba_1e_ch02_Data_Files.xlsx',sheet_name='Population')
----> 4 df=df.sort_values('2017',ascending=True)
5 df['Group'] = pd.qcut(df['2017'], q = 4, labels = range(1, 5))
6 splitData = [group for _, group in df.groupby('Group')]
C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\frame.py in sort_values(self, by, axis, ascending, inplace, kind, na_position, ignore_index, key)
5453
5454 by = by[0]
-> 5455 k = self._get_label_or_level_values(by, axis=axis)
5456
5457 # need to rewrap column in Series to apply key function
C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\generic.py in _get_label_or_level_values(self, key, axis)
1682 values = self.axes[axis].get_level_values(key)._values
1683 else:
-> 1684 raise KeyError(key)
1685
1686 # Check for duplicates
KeyError: '2017'
怎么了? 谢谢~
这是数据框:
我试过了:
df=pd.read_excel('C:/Users/Sam/Desktop/商業分析/Python_Jabbia1e/Chapter 2/jaggia_ba_1e_ch02_Data_Files.xlsx',sheet_name='Population')
df=df.sort_values('2017',ascending=True)
df['Group'] = pd.qcut(df['2017'], q = 4, labels = range(1, 5))
splitData = [group for _, group in df.groupby('Group')]
print('The number of group4 is :',splitData[3].shape[0])
首先,您在第 4 行的排序有问题,您告诉排序函数查找字符串 2017,但它是整数。试试这个然后继续你的代码:
df=df.sort_values([2017],ascending=True)
您正在将 df.sort_values()
的密钥作为 str
插入。您可以将其作为列表中的元素提供,也可以不提供。
df = df.sort_values(by=['2017'], ascending=True)
或
df = df.sort_values(by='2017', ascending=True)
这仅在列值与您传递的字符串完全匹配时有效。如果它不是一个字符串或者如果该字符串包含一些空格,它将不起作用。您可以在排序前删除任何尾随空格,
df.columns = df.columns.str.strip()
如果它不是您应该使用的字符串,
df = df.sort_values(by=[2017], ascending=True)