【问题标题】:Removing index column in pandas when reading a csv读取 csv 时删除 pandas 中的索引列
【发布时间】:2013-12-05 03:10:15
【问题描述】:

我有以下导入 CSV 文件的代码。有 3 列,我想将前两列设置为变量。当我将第二列设置为变量“效率”时,索引列也被添加了。如何摆脱索引列?

df = pd.DataFrame.from_csv('Efficiency_Data.csv', header=0, parse_dates=False)
energy = df.index
efficiency = df.Efficiency
print efficiency

我尝试过使用

del df['index']

我设置后

energy = df.index

我在另一篇文章中找到但导致“KeyError: 'index'”

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    在写入和读取 CSV 文件时,分别包含参数 index=Falseindex_col=False。举个例子:

    写作:

     df.to_csv(filename, index=False)
    

    并从 csv 中读取

    df.read_csv(filename, index_col=False)  
    

    这应该可以防止出现问题,因此您以后不需要修复它。

    【讨论】:

    • 非常感谢。这正是问题所在。
    • "header = False" 以同样的方式删除标题
    • 应该是index_col=False
    • 使用df.to_sql("table",cursor,if_exists="append",index=False)也修复了sqlite错误sqlite3.OperationalError: table message has no column named index
    • @vedda 在 pandas 0.23.4 中,to_excel()index_col=False 似乎是 index=Falseread_csv()。 :-/
    【解决方案2】:

    df.reset_index(drop=True, inplace=True)

    【讨论】:

    • 这实际上是我最喜欢的解决方案,但不是一个非常详尽的答案。手册中关于参数drop 的内容如下:“不要尝试将索引插入数据框列。这会将索引重置为默认整数索引。” pandas.pydata.org/pandas-docs/stable/generated/…
    • @tommy.carstensen 那么您将如何避免将索引上的整数作为先前索引的替换?我认为这是对您的链接文本的误解。这里的问题是删除索引。这是到达这里。您将获得默认整数,因为没有没有索引的日期帧,但您已经删除了前一个索引。这就是为什么这个答案应该是公认的答案,也因为它使用了内存高效的inplace=True
    【解决方案3】:

    DataFramesSeries 总是有一个索引。尽管它显示在列旁边,但它不是列,这就是 del df['index'] 不起作用的原因。

    如果您想用简单的序号替换索引,请使用df.reset_index()

    要了解索引为何存在以及如何使用它,请参阅例如10 minutes to Pandas

    【讨论】:

    • 谢谢!我决定以不使用熊猫的不同方式导入它。我必须对每一列执行一些算术运算,python 不喜欢附加索引列。 Pandas 无疑是最简单的数据导入方式,但并不总是我发现的最好的。
    • 你试过用 Pandas 做算术吗?
    • 可以去掉索引名吗?
    • 是的,index.name = None
    • 是的,显然下一个答案应该是被接受的。
    【解决方案4】:

    例如,您可以将其中一列设置为索引,以防它是“id”。 在这种情况下,索引列将被您选择的列之一替换。

    df.set_index('id', inplace=True)
    

    【讨论】:

    • 嗯,这对我不起作用。我得到“无”作为控制台打印输出。
    【解决方案5】:

    如果您的问题与我的问题相同,您只想将列标题从 0 重置为列大小。做

    df = pd.DataFrame(df.values);
    

    编辑:

    如果您有异构数据类型,这不是一个好主意。最好只使用

    df.columns = range(len(df.columns))
    

    【讨论】:

      【解决方案6】:

      您可以使用 from_csv 函数的 index_col 参数指定 csv 文件中的索引列 如果这不能解决您的问题,请提供您的数据示例

      【讨论】:

        【解决方案7】:

        我做的一件事是df=df.reset_index() 然后df=df.drop(['index'],axis=1)

        【讨论】:

        • 错误:“标签 ['index'] 不包含在轴中”
        • @VasinYuriy 这意味着像df.reset_index().drop(columns=['yourfirstindex', 'yoursecondindex']),它仅在索引没有名称的标准情况下与'index'一起使用,然后变成一个名为'index'的列df.reset_index().drop(columns=['index']) .添加的参数axis=1 是默认值。不推荐这种方法,@SubhojitMukherjee 的reset_index(inplace=True) 可以“就地”工作,从而节省内存。
        【解决方案8】:

        要删除或不创建默认索引列,您可以将 index_col 设置为 False 并将标题保持为零。下面是一个示例,说明如何做到这一点。

        recording = pd.read_excel("file.xls",
                             sheet_name= "sheet1",
                             header= 0,
                             index_col= False)
        

        header = 0 将使您的属性成为标题,您可以稍后使用它来调用列。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-17
          • 2018-07-31
          • 1970-01-01
          • 2015-07-31
          • 2015-01-03
          相关资源
          最近更新 更多