当我尝试获取数据框中某些列的值计数时,我得到此错误,指出索引必须是单调的,但is_monotonic属性表示索引已经是这样。导入csv后,数据框中的大多数列都不会返回此错误,但有一些会这样做。
我尝试了一些here,提到的策略,但似乎无法让它发挥作用。
这样做:
import pandas as pd
data = pd.read_csv('info/train.csv')
print('Monotonic?: ', data['net_booking_value_monthly'].index.is_monotonic)
print(data['net_booking_value_monthly'].value_counts(dropna=False)[:10])
给我这个:
Monotonic?: True
Traceback (most recent call last):
File "/Users/person/venvs/science/lib/python3.6/site-packages/pandas/core/indexes/base.py", line 3484, in get_slice_bound
return self._searchsorted_monotonic(label, side)
File "/Users/person/venvs/science/lib/python3.6/site-packages/pandas/core/indexes/base.py", line 3443, in _searchsorted_monotonic
raise ValueError('index must be monotonic increasing or decreasing')
ValueError: index must be monotonic increasing or decreasing
During handling of the above exception, another exception occurred:
等。等
我的目标是is_monotonic属性为True,但值count会返回此错误。输入的CSV文件非常大,我无法分享它,但有什么我应该在那里找到会导致这个吗?
Pandas版本为0.20.2。
答案 0 :(得分:1)
问题仅在于value_counts()方法将唯一值作为索引返回,并将其对应的频率作为值返回。因此,如果尝试使用Indexing方法[:10]为前10个值建立索引,则该索引将无效,因为索引不是Pandas创建的Integer。
您可以在value_counts()之后使用.reset_index()
,然后像以前一样访问前10个值
data['net_booking_value_monthly'].value_counts(dropna=False).reset_index()[:10]
答案 1 :(得分:0)
建议尝试这个:
import pandas as pd
data = pd.read_csv('info/train.csv')
print('Monotonic?: ', data['net_booking_value_monthly'].index.is_monotonic)
data = data.sort_index()
print(data['net_booking_value_monthly'].value_counts(dropna=False)[:10])