2013-08-17 54 views
13

Làm cách nào để tôi có thể thả hoặc tắt các chỉ mục trong Khung dữ liệu gấu trúc?tắt khung dữ liệu gấu trúc của chỉ mục

Tôi đang học gấu trúc từ sách "python để phân tích dữ liệu" và tôi đã biết tôi có thể sử dụng dataframe.drop để thả một cột hoặc một hàng. Nhưng tôi không tìm thấy bất cứ điều gì về việc vô hiệu hóa tất cả các chỉ số tại chỗ.

Trả lời

10

df.values cung cấp cho bạn số liệu NumPy ndarray không có chỉ mục.

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

Bạn không thể có một DataFrame mà không cần các chỉ số, họ là những điểm chung của các DataFrame :)

Nhưng chỉ để được rõ ràng, hoạt động này không phải là inplace:

>>> df.values is df.values 
False 

DataFrame giữ dữ liệu trong mảng hai chiều được nhóm theo loại, vì vậy khi bạn muốn toàn bộ khung dữ liệu, nó sẽ phải tìm màn hình LCD của tất cả các kiểu dtypes và xây dựng một mảng 2D thuộc loại đó.

Để tạo một khung dữ liệu mới với các giá trị từ một tuổi, chỉ cần vượt qua DataFrame cũ sang những nhà xây dựng mới và không có dữ liệu sẽ được sao chép cấu trúc dữ liệu tương tự sẽ được tái sử dụng:

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

Nhưng bạn có thể chỉ định rõ ràng thông số 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 
+0

Cảm ơn bạn. Những gì tôi đã làm là để bắt đầu một dataframe mới với các giá trị của dataframe cũ. – GeauxEric

+1

Cập nhật câu trả lời. –

+0

Tôi nghĩ rằng những gì tôi thực sự muốn làm là ghi dữ liệu vào một tệp mà không có chỉ mục và có thể dễ dàng thực hiện bằng cách đặt chỉ mục = False. Xin lỗi tôi đã không làm cho câu hỏi của tôi rõ ràng ở nơi đầu tiên. Câu trả lời của bạn rất trực quan. – GeauxEric

0

Tôi có một chức năng có thể giúp một số. Tôi kết hợp tệp csv với tiêu đề theo cách sau trong 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 

Có thể lấy bao nhiêu tệp tùy ý. Gọi đây là:

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

Hoặc nếu bạn đang đọc dataframe trong python như:

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

Các combine_csvs fucntion không lưu các chỉ số. Nếu bạn cần các chỉ mục sử dụng 'index = True' thay thế.

0
d.index = range(len(d)) 

thực hiện đặt lại chỉ mục tại chỗ đơn giản - nghĩa là xóa tất cả chỉ mục hiện tại và thêm số nguyên cơ bản, loại chỉ số cơ bản nhất mà một khung hình có thể có.

1

Tôi đã gặp sự cố tương tự khi cố gắng lấy DataFrame từ CSV không có chỉ mục và ghi lại tệp đó vào một tệp khác.

tôi đã đưa ra như sau:

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() 
0

Ngoài ra, nếu bạn đang sử dụng df.to_excel chức năng của một pd.ExcelWriter, đó là nơi mà nó được ghi vào một bảng tính Excel, bạn có thể chỉ định index=False trong thông số của bạn có .

tạo nhà văn Excel:

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

Chúng tôi có một danh sách gọi là 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() 
Các vấn đề liên quan