numpy 使用Pandas时出现错误:“ValueError:2 is not in range”

oyt4ldly  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(212)

我得到了这个错误,当尝试拆分我的一列到几列.但它分裂上只是一个或两个列.如果你想分裂上3,4,5列它写道:

ValueError                                Traceback (most recent call last)
/usr/local/Cellar/jupyterlab/2.1.5/libexec/lib/python3.8/site-packages/pandas/core/indexes/range.py in get_loc(self, key, method, tolerance)
    349             try:
--> 350                 return self._range.index(new_key)
    351             except ValueError:

ValueError: 2 is not in range

During handling of the above exception, another exception occurred:

KeyError                                  Traceback (most recent call last)
<ipython-input-19-d4e6a4d03e69> in <module>
     22 data_old[Col_1_Label] = newz[0]
     23 data_old[Col_2_Label] = newz[1]
---> 24 data_old[Col_3_Label] = newz[2]
     25 #data_old[Col_4_Label] = newz[3]
     26 #data_old[Col_5_Label] = newz[4]

/usr/local/Cellar/jupyterlab/2.1.5/libexec/lib/python3.8/site-packages/pandas/core/frame.py in __getitem__(self, key)
   2798             if self.columns.nlevels > 1:
   2799                 return self._getitem_multilevel(key)
-> 2800             indexer = self.columns.get_loc(key)
   2801             if is_integer(indexer):
   2802                 indexer = [indexer]

/usr/local/Cellar/jupyterlab/2.1.5/libexec/lib/python3.8/site-packages/pandas/core/indexes/range.py in get_loc(self, key, method, tolerance)
    350                 return self._range.index(new_key)
    351             except ValueError:
--> 352                 raise KeyError(key)
    353         return super().get_loc(key, method=method, tolerance=tolerance)
    354 

KeyError: 2

字符串
这是我的代码。我有CSV文件。当Pandas读取它时-创建一个值为“онтрак а”的列。然后。我将其拆分到另一列上。但它拆分为两列。我想要7列!请帮助理解此逻辑!

import pandas as pd
from pandas import Series, DataFrame
import re

dframe1 = pd.read_csv('po.csv')
columns = ['Контракт']
data_old = pd.read_csv('po.csv', header=None, names=columns)
data_old
# The thing you want to split the column on
SplitOn = ':'

# Name of Column you want to split
Split_Col = 'Контракт'


newz = data_old[Split_Col].str.split(pat=SplitOn, n=-1, expand=True)

# Column Labels (you can add more if you will have more)
Col_1_Label = 'Номер телефону'
Col_2_Label = 'Тарифний пакет'
Col_3_Label = 'Вихідні дзвінки з України за кордон'
Col_4_Label = 'ВАРТІСТЬ ПАКЕТА/ЩОМІСЯЧНА ПЛАТА'
Col_5_Label = 'ЗАМОВЛЕНІ ДОДАТКОВІ ПОСЛУГИ ЗА МЕЖАМИ ПАКЕТА'
Col_6_Label = 'Вартість послуги "Корпоративна мережа'
Col_7_Label = 'ЗАГАЛОМ ЗА КОНТРАКТОМ (БЕЗ ПДВ ТА ПФ)'
data_old[Col_1_Label] = newz[0]
data_old[Col_2_Label] = newz[1]
data_old[Col_3_Label] = newz[2]
#data_old[Col_4_Label] = newz[3]
#data_old[Col_5_Label] = newz[4]
#data_old[Col_6_Label] = newz[5]
#data_old[Col_7_Label] = newz[6]

data_old

4uqofj5v

4uqofj5v1#

错误消息是 ValueError:2 is not in range,所以当我试图从名为 2 的列中检索数据时,此错误的来源可能是 data_old[Col_3_Label] = newz[2]
它看起来像你之前创建的 newz 只包含2列,名称为 01
为了确认这一点,在创建了 newz 之后,打印它的列或最初的几行(打印 newz.head())。
最有可能的情况是,有问题的列(<$онтракт)只包含一个“:“,因此拆分只发生在2列上。

yvgpqqbh

yvgpqqbh2#

您可能需要先设置索引。

相关问题