Pandas value_count()'索引必须是单调的,但索引已经是

时间:2017-12-13 09:55:29

标签: python python-3.x pandas csv

当我尝试获取数据框中某些列的值计数时,我得到此错误,指出索引必须是单调的,但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。

2 个答案:

答案 0 :(得分:1)

由于value_counts()返回唯一值作为INDEX。

问题仅在于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])