it-swarm.com.de

starten Sie den Index um 1 für Pandas DataFrame

Ich brauche den Index, um beim Schreiben eines Pandas DataFrame in CSV mit 1 anstatt mit 0 zu beginnen.

Hier ist ein Beispiel:

In [1]: import pandas as pd

In [2]: result = pd.DataFrame({'Count': [83, 19, 20]})

In [3]: result.to_csv('result.csv', index_label='Event_id')                               

Was ergibt die folgende Ausgabe:

In [4]: !cat result.csv
Event_id,Count
0,83
1,19
2,20

Aber meine gewünschte Ausgabe ist folgende:

In [5]: !cat result2.csv
Event_id,Count
1,83
2,19
3,20

Ich erkenne, dass dies durch Hinzufügen einer um 1 verschobenen Folge von Ganzzahlen zu meinem Datenrahmen möglich ist, aber ich bin neu bei Pandas und frage mich, ob ein saubererer Weg existiert.

30

Index ist ein Objekt und der Standardindex beginnt mit 0:

>>> result.index
Int64Index([0, 1, 2], dtype=int64)

Sie können diesen Index mit 1 mit verschieben

>>> result.index += 1 
>>> result.index
Int64Index([1, 2, 3], dtype=int64)
49
alko

Stellen Sie einfach den Index ein, bevor Sie in csv schreiben. df.index = np.arange(1, len(df))

Und dann schreibe es normal.

12
TomAugspurger

Das hat bei mir funktioniert

 df.index = np.arange(1, len(df)+1)
4
Liu Yu

Ein anderer Weg in einer Zeile:

df.shift()[1:]
3
Imran

source: In Python-Pandas beginnen Sie den Zeilenindex von 1 statt von Null, ohne eine zusätzliche Spalte zu erstellen

Arbeitsbeispiel:

import pandas as pdas
dframe = pdas.read_csv(open(input_file))
dframe.index = dframe.index + 1
3
Dung

Sie können dieses verwenden:

import pandas as pd

result = pd.DataFrame({'Count': [83, 19, 20]})
result.index += 1
print(result)

oder dieses, indem Sie die Hilfe der numpy-Bibliothek folgendermaßen erhalten:

import pandas as pd
import numpy as np

result = pd.DataFrame({'Count': [83, 19, 20]})
result.index = np.arange(1, len(result)+1)
print(result)

np.arange erstellt ein numpy-Array und gibt Werte innerhalb eines bestimmten Intervalls zurück, das (1, len(result)+1) ist, und schließlich weisen Sie result.index dieses Array zu.

0
Utku

Gabel aus der ursprünglichen Antwort, einige Cent geben:

  • wenn ich mich nicht irre, hat das Indexobjekt ab Version 0.23 den Typ RangeIndex

Aus dem offiziellen Dokument :

RangeIndex ist ein speichersparender Spezialfall von Int64Index, der auf die Darstellung von monotonen Bereichen beschränkt ist. Die Verwendung von RangeIndex kann in einigen Fällen die Rechengeschwindigkeit verbessern.

Im Falle eines großen Indexbereichs ist dies sinnvoll, wenn Sie die Darstellung des Index verwenden, anstatt den gesamten Index auf einmal zu definieren (Speicherplatz sparen).

Daher ein Beispiel (mit Series, das jedoch auch für DataFrame gilt):

>>> import pandas as pd
>>> 
>>> countries = ['China', 'India', 'USA']
>>> ds = pd.Series(countries)
>>> 
>>>
>>> type(ds.index)
<class 'pandas.core.indexes.range.RangeIndex'>
>>> ds.index
RangeIndex(start=0, stop=3, step=1)
>>> 
>>> ds.index += 1
>>> 
>>> ds.index
RangeIndex(start=1, stop=4, step=1)
>>> 
>>> ds
1    China
2    India
3      USA
dtype: object
>>> 

Wie Sie sehen, ändert das Inkrement des index-Objekts die Parameter start und stop.

0
ivanleoncz