Подтвердить что ты не робот

Отключить индекс pandas кадр данных

Как я могу сбросить или отключить индексы в кадре данных pandas?

Я изучаю pandas из книги "python для анализа данных", и я уже знаю, что могу использовать dataframe.drop для удаления одного столбца или одной строки. Но я ничего не нашел об отключении всех индексов.

4b9b3361

Ответ 1

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 хранит данные в двухмерных массивах, сгруппированных по типу, поэтому, когда вам нужен весь кадр данных, ему придется найти ЖК-дисплей всех типов и создать 2D-массив этого типа.

Чтобы создать новый кадр данных со значениями из старого, просто передайте старый DataFrame новому конструктору и никакие данные не будут скопированы, те же структуры данных будут повторно использованы:

>>> 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

Ответ 2

У меня была аналогичная проблема, пытаясь взять DataFrame из CSV без индекса и записать его обратно в другой файл.

Я придумал следующее:

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

У меня есть функция, которая может помочь некоторым. Я совмещаю файлы csv с заголовком следующим образом в python:

    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')

Или, если вы читаете dataframe в python как:

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

Функция comb_csvs не сохраняет индексы. Если вам нужны индексы, вместо этого используйте "index = True".

Ответ 4

d.index = range(len(d))

имеет простой индекс на месте reset - то есть он удаляет все существующие индексы и добавляет базовый целочисленный, который является самым основным типом индекса, который может иметь pandas Dataframe.

Ответ 5

Кроме того, если вы используете df.to_excel функцию pd.ExcelWriter, где она записана на листе 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()