首页 文章

pandas中`header = None`和`header = 0`之间的区别

提问于
浏览
-1

我正在编写一个代码来使用 pandas 读取 csv 文件,我看到了一些奇怪的软件包功能 . 我的文件有列名,我想忽略,所以我使用 header = 0'infer' 而不是 None . 但我看到一些奇怪的东西 .

当我使用 None 并且我想得到一个特定的列时,我只需要做 df[column_index] 但是当我使用 0'infer' 时,我需要做 df.ix[:,column_index] 来获取列,否则,对于 df[column_index] 我收到以下错误:

Traceback(最近一次调用最后一次):文件“/home/sarvagya/anaconda3/envs/tf/lib/python3.6/site-packages/pandas/core/indexes/base.py”,第2525行,在get_loc中返回self ._engine.get_loc(key)文件“pandas / _libs / index.pyx”,第117行,在pandas._libs.index.IndexEngine.get_loc文件“pandas / _libs / index.pyx”第139行,在pandas._libs中 . index.IndexEngine.get_loc文件“pandas / _libs / hashtable_class_helper.pxi”,第1265行,在pandas._libs.hashtable.PyObjectHashTable.get_item文件“pandas / _libs / hashtable_class_helper.pxi”,第1273行,在pandas._libs.hashtable中 . PyObjectHashTable.get_item KeyError:column_index在处理上述异常期间,发生了另一个异常:Traceback(最近一次调用last):File“/ home / sarvagya / anaconda3 / envs / tf / lib / python3中的文件”“,第1行 . 6 / site-packages / pandas / core / frame.py“,第2139行,在getitem中返回self._getitem_column(key)文件”/home/sarvagya/anaconda3/envs/tf/lib/python3.6/site-packages/ pandas / core / frame.py“,第2146行,在_getitem_column中返回sel f._get_item_cache(key)文件“/home/sarvagya/anaconda3/envs/tf/lib/python3.6/site-packages/pandas/core/generic.py”,第1842行,在_get_item_cache values = self._data.get (项目)文件“/home/sarvagya/anaconda3/envs/tf/lib/python3.6/site-packages/pandas/core/internals.py”,第3843行,在get loc = self.items.get_loc(item)中文件“/home/sarvagya/anaconda3/envs/tf/lib/python3.6/site-packages/pandas/core/indexes/base.py”,第2527行,在get_loc中返回self._engine.get_loc(self._maybe_cast_indexer(密钥))文件“pandas / _libs / index.pyx”,第117行,在pandas._libs.index.IndexEngine.get_loc文件“pandas / _libs / index.pyx”,第139行,在pandas._libs.index.IndexEngine中 . get_loc文件“pandas / _libs / hashtable_class_helper.pxi”,第1265行,位于pandas._libs.hashtable.PyObjectHashTable.get_item文件“pandas / _libs / hashtable_class_helper.pxi”,第1273行,pandas._libs.hashtable.PyObjectHashTable.get_item KeyError :column_index

有人可以帮忙吗?为什么会这样?

1 回答

  • 0

    看起来需要2个参数 - header=Noneskiprows=1 如果要忽略原始列名称为默认 RangeIndex .

    因为如果在第一行中仅使用 header=None 获取原始列名称 .

    header=0 读取第一行到 DataFrame 的列名 .

    Sample

    import pandas as pd
    
    temp=u"""a,b,c
    1,2,3
    4,5,6"""
    #after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
    df = pd.read_csv(pd.compat.StringIO(temp), header=0)
    print (df)
       a  b  c
    0  1  2  3
    1  4  5  6
    

    按位置选择:

    print (df.iloc[:, 1])
    0    2
    1    5
    Name: b, dtype: int64
    

    按列名选择:

    print (df['b'])
    
    0    2
    1    5
    Name: b, dtype: int64
    

    没有列名 1 ,所以:

    print(df [1])KeyError:1


    df = pd.read_csv(pd.compat.StringIO(temp), header=None)
    print (df)
       0  1  2
    0  a  b  c
    1  1  2  3
    2  4  5  6
    
    df = pd.read_csv(pd.compat.StringIO(temp), header=None, skiprows=1)
    print (df)
       0  1  2
    0  1  2  3
    1  4  5  6
    
    print (df[1])
    0    2
    1    5
    Name: 1, dtype: int64
    

相关问题