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