【问题标题】:disable index pandas data frame禁用索引熊猫数据框
【发布时间】:2013-08-19 20:27:15
【问题描述】:

如何删除或禁用 pandas 数据框中的索引?

我正在从“python 用于数据分析”一书中学习 pandas,并且我已经知道我可以使用 dataframe.drop 删除一列或一行。但是我没有找到任何关于禁用所有索引的信息。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    此外,如果您正在使用 pd.ExcelWriterdf.to_excel 函数(将其写入 Excel 工作表),则可以在此处的参数中指定 index=False

    创建 Excel 编写器:

    writer = pd.ExcelWriter(type_box + '-rules_output-' + date_string + '.xlsx',engine='xlsxwriter')  
    

    我们有一个名为lines的列表:

    # create a dataframe called 'df'
    df = pd.DataFrame([sub.split(",") for sub in lines], columns=["Rule", "Device", "Status"]))
    
    #convert df to Excel worksheet
    df.to_excel(writer, sheet_name='all_status',**index=False**)
    writer.save()
    

    【讨论】:

      【解决方案2】:

      我在尝试从无索引的 CSV 中获取 DataFrame 并将其写回另一个文件时遇到了类似的问题。

      我想出了以下内容:

      import pandas as pd
      import os
      
      def csv_to_df(csv_filepath):
          # the read_table method allows you to set an index_col to False, from_csv does not
          dataframe_conversion = pd.io.parsers.read_table(csv_filepath, sep='\t', header=0, index_col=False)
          return dataframe_conversion
      
      def df_to_excel(df):
          from pandas import ExcelWriter
          # Get the path and filename w/out extension
          file_name = 'foo.xlsx'
          # Add the above w/ .xslx
          file_path = os.path.join('some/directory/', file_name)
          # Write the file out
          writer = ExcelWriter(file_path)
          # index_label + index are set to `False` so that all the data starts on row
          # index 1 and column labels (called headers by pandas) are all on row index 0.
          df.to_excel(writer, 'Attributions Detail', index_label=False, index=False, header=True)
          writer.save()
      

      【讨论】:

        【解决方案3】:
        d.index = range(len(d))
        

        进行简单的就地索引重置 - 即,它删除所有现有索引,并添加一个基本整数,这是 pandas Dataframe 可以拥有的最基本的索引类型。

        【讨论】:

          【解决方案4】:

          我有一个功能可以帮助一些人。我在 python 中通过以下方式将 csv 文件与标头结合起来:

              def combine_csvs(filedict, combined_file):
                  files = filedict['files']
                  df = pd.read_csv(files[0])
                  for file in files[1:]:
                      df = pd.concat([df, pd.read_csv(file)])
                  df.to_csv(combined_file, index=False)
                  return df
          

          它可以根据需要接收任意数量的文件。将其称为:

              combine_csvs(dict(files=["file1.csv","file2.csv", "file3.csv"]), 'output.csv')
          

          或者如果你在 python 中读取数据框:

              df = combine_csvs(dict(files=["file1.csv","file2.csv"]), 'output.csv')
          

          combine_csvs 函数不保存索引。如果您需要索引,请改用 'index=True'。

          【讨论】:

            【解决方案5】:

            df.values 为您提供不带索引的原始 NumPy ndarray

            >>> df
               x   y
            0  4  GE
            1  1  RE
            2  1  AE
            3  4  CD
            >>> df.values
            array([[4, 'GE'],
                   [1, 'RE'],
                   [1, 'AE'],
                   [4, 'CD']], dtype=object)
            

            你不能有一个没有索引的 DataFrame,它们是 DataFrame 的全部内容:)

            但要明确一点,这个操作不是就地

            >>> df.values is df.values
            False
            

            DataFrame 将数据保存在按类型分组的二维数组中,因此当您想要整个数据帧时,它必须找到所有 dtype 的 LCD 并构造该类型的二维数组。

            要使用旧数据框的值实例化一个新数据框,只需将旧数据框传递给新的构造函数,不会复制任何数据,相同的数据结构将被重用:

            >>> df1 = pd.DataFrame([[1, 2], [3, 4]])
            >>> df2 = pd.DataFrame(df1)
            >>> df2.iloc[0,0] = 42
            >>> df1
                0  1
            0  42  2
            1   3  4
            

            但你可以显式指定copy参数:

            >>> df1 = pd.DataFrame([[1, 2], [3, 4]])
            >>> df2 = pd.DataFrame(df1, copy=True)
            >>> df2.iloc[0,0] = 42
            >>> df1
               0  1
            0  1  2
            1  3  4
            

            【讨论】:

            • 谢谢。我所做的是使用旧数据帧的值启动一个新数据帧。
            • 我认为我真正想做的是将数据写入没有索引的文件,这可以通过设置 index=False 轻松完成。抱歉,我一开始没有把我的问题说清楚。您的回答非常直观。
            猜你喜欢
            • 2022-07-10
            • 1970-01-01
            • 2015-05-28
            • 2018-02-02
            • 2012-12-20
            • 2017-11-03
            • 1970-01-01
            • 1970-01-01
            • 2016-06-13
            相关资源
            最近更新 更多