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
Danke, es scheint ein Fehler zu sein. Wenn die Eingabe ein Series
vom Original abgeschnitten wurde, sollte die entsprechende Spalte gelöscht werden.
funktioniert gut, wenn wir den Spaltennamen übergeben.
dtf.set_index('DATE_TIME', drop=True, inplace=True)
dtf.columns
# Index(['A'], dtype='object')
kein Fehler - dies verstößt gegen die Garantien von set_index
Es ist nicht gültig, hier eine tatsächliche Spalte zu übergeben -
Es ist nicht dasselbe wie das tatsächliche Zuweisen des Index
Es gibt eine PR, in der versucht wird, diese Arbeit zu machen - aber sie ist von Natur aus mehrdeutig
Ich bin mir nicht mal sicher, ob du davor warnen könntest
(obwohl es ein Fehler ist, inplace und drop zu verwenden, denke ich)
kein Fehler - dies verstößt gegen die Garantien von set_index
Könnten Sie näher erläutern, welche Garantie set_index ist? Ich finde es verwirrend, wenn ich speziell drop=True
und keine Fehlermeldung erhalte, wenn das Löschen aus irgendeinem Grund nicht erlaubt oder möglich ist.
@ Michaelaye
Wenn Sie eine Liste für die Schlüssel übergeben, wird per Definition der Index festgelegt. Man könnte jedoch möglicherweise denken, dass [58] das tatsächliche Ergebnis von [57] ist.
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
Pläne, dies zu beheben?
Hilfreichster Kommentar
Danke, es scheint ein Fehler zu sein. Wenn die Eingabe ein
Series
vom Original abgeschnitten wurde, sollte die entsprechende Spalte gelöscht werden.funktioniert gut, wenn wir den Spaltennamen übergeben.