Pandas: Tidak berfungsi set_index dengan drop

Dibuat pada 14 Jul 2016  ·  6Komentar  ·  Sumber: pandas-dev/pandas

Contoh Kode, contoh copy-paste jika memungkinkan

from io import StringIO
from pandas import read_csv

dtf = read_csv(StringIO("DATE_TIME,A\n2/8/2015  6:00:30,1"))

print(dtf)

dtf.set_index(dtf.DATE_TIME, drop=True, inplace=True)
print(dtf.columns)
print(dtf)

Output saat ini

           DATE_TIME  A
0  2/8/2015  6:00:30  1
Index(['DATE_TIME', 'A'], dtype='object')
                           DATE_TIME  A
DATE_TIME                              
2/8/2015  6:00:30  2/8/2015  6:00:30  1

Output yang Diharapkan

           DATE_TIME  A
0  2/8/2015  6:00:30  1
Index(['A'], dtype='object')
                           A
DATE_TIME                              
2/8/2015  6:00:30  1

keluaran pd.show_versions()

INSTALLED VERSIONS
------------------
commit: None
python: 3.5.1.final.0
python-bits: 64
OS: Darwin
OS-release: 15.5.0
machine: x86_64
processor: i386
byteorder: little
LC_ALL: None
LANG: None

pandas: 0.18.1
nose: None
pip: 8.1.2
setuptools: 20.6.7
Cython: None
numpy: 1.11.1
scipy: 0.16.1
statsmodels: None
xarray: None
IPython: 4.0.1
sphinx: None
patsy: None
dateutil: 2.5.3
pytz: 2016.6
blosc: None
bottleneck: None
tables: None
numexpr: None
matplotlib: 1.5.0
openpyxl: 2.3.5
xlrd: 1.0.0
xlwt: 1.0.0
xlsxwriter: None
lxml: None
bs4: 4.4.1
html5lib: None
httplib2: 0.9.2
apiclient: 1.5.0
sqlalchemy: None
pymysql: None
psycopg2: None
jinja2: 2.8
boto: None
pandas_datareader: None
None
Bug Error Reporting Reshaping

Komentar yang paling membantu

Terima kasih, sepertinya bug. jika masukan adalah Series diiris dari aslinya, kolom terkait harus dihapus.

berfungsi dengan baik jika kita melewati nama kolom.

dtf.set_index('DATE_TIME', drop=True, inplace=True)
dtf.columns
# Index(['A'], dtype='object')

Semua 6 komentar

Terima kasih, sepertinya bug. jika masukan adalah Series diiris dari aslinya, kolom terkait harus dihapus.

berfungsi dengan baik jika kita melewati nama kolom.

dtf.set_index('DATE_TIME', drop=True, inplace=True)
dtf.columns
# Index(['A'], dtype='object')

bukan bug - ini melanggar jaminan set_index

tidak valid untuk melewatkan kolom sebenarnya di sini -

itu tidak sama dengan sebenarnya menetapkan indeks

ada PR di mana mencoba membuat ini berhasil - tetapi itu secara inheren ambigu

bahkan tidak yakin Anda bisa memperingatkan tentang ini
(meskipun saya pikir itu adalah kesalahan untuk menggunakan inplace dan drop)

bukan bug - ini melanggar jaminan set_index

Bisakah Anda menjelaskan jaminan apa itu dari set_index? Saya merasa bingung jika saya secara khusus menggunakan drop=True dan tidak mendapatkan kesalahan ketika karena alasan tertentu menjatuhkan tidak diperbolehkan atau mungkin.

@ichaelaye

ketika Anda melewati daftar untuk kunci, itu adalah pengaturan indeks menurut definisi. Namun, orang mungkin dapat berpikir bahwa [58] adalah hasil sebenarnya dari [57].

In [55]: df = pd.DataFrame({'A':range(2),'B':range(2),'C':range(2)})

In [56]: df
Out[56]: 
   A  B  C
0  0  0  0
1  1  1  1

In [57]: df.set_index(['A','B'])
Out[57]: 
     C
A B   
0 0  0
1 1  1

In [58]: df.index=['A','B']

In [59]: df
Out[59]: 
   A  B  C
A  0  0  0
B  1  1  1
In [54]: DataFrame.set_index?
Signature: DataFrame.set_index(self, keys, drop=True, append=False, inplace=False, verify_integrity=False)
Docstring:
Set the DataFrame index (row labels) using one or more existing
columns. By default yields a new object.

Parameters
----------
keys : column label or list of column labels / arrays
drop : boolean, default True
    Delete columns to be used as the new index
append : boolean, default False
    Whether to append columns to existing index
inplace : boolean, default False
    Modify the DataFrame in place (do not create a new object)
verify_integrity : boolean, default False
    Check the new index for duplicates. Otherwise defer the check until
    necessary. Setting to False will improve the performance of this
    method

Examples
--------
>>> indexed_df = df.set_index(['A', 'B'])
>>> indexed_df2 = df.set_index(['A', [0, 1, 2, 0, 1, 2]])
>>> indexed_df3 = df.set_index([[0, 1, 2, 0, 1, 2]])

Returns
-------
dataframe : DataFrame

ada rencana untuk memperbaikinya?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat