2015-07-24 4 views
10

Es scheint mir seltsam, dass pandas.read_csv keine direkte reziproke Funktion zu df.to_csv ist. Beachten Sie in dieser Abbildung, wie sich bei Verwendung aller Standardeinstellungen die ursprünglichen und endgültigen DataFrames durch die Spalte "Unbenannt" unterscheiden.Warum ist `pandas.read_csv` nicht das Gegenstück von` pandas.DataFrame.to_csv`?

In [1]: import pandas as pd 

In [2]: orig_df = pd.DataFrame({'AAA' : [4,5,6,7], 'BBB' : [10,20,30,40],'CCC' : [100,50,-30,-50]}); orig_df 
Out[2]: 
    AAA BBB CCC 
0 4 10 100 
1 5 20 50 
2 6 30 -30 
3 7 40 -50 

[4 rows x 3 columns] 

In [3]: orig_df.to_csv('test.csv') 

In [4]: final_df = pd.read_csv('test.csv'); final_df 
Out[4]: 
    Unnamed: 0 AAA BBB CCC 
0   0 4 10 100 
1   1 5 20 50 
2   2 6 30 -30 
3   3 7 40 -50 

[4 rows x 4 columns] 

Es scheint, die Standard-read_csv statt

sollte
In [6]: final2_df = pd.read_csv('test.csv', index_col=0); final2_df 
Out[7]: 
    AAA BBB CCC 
0 4 10 100 
1 5 20 50 
2 6 30 -30 
3 7 40 -50 

[4 rows x 3 columns] 

oder die Standard-to_csv statt

sein sollte
In [8]: df.to_csv('test2.csv', index=False) 

, die beim Lesen gibt

In [9]: pd.read_csv('test2.csv') 
Out[9]: 
    AAA BBB CCC 
0 4 10 100 
1 5 20 50 
2 6 30 -30 
3 7 40 -50 

[4 Zeilen x 3 Spalten]

(Vielleicht sollte dies stattdessen an die Entwickler gesendet werden, aber ich bin wirklich interessiert, warum dies das Standardverhalten ist. Hoffentlich kann es auch anderen helfen, die Verwirrung zu vermeiden, die ich hatte).

+3

Ich denke, es ist vor, weil, wenn Sie verwendet 'pd.DataFrame.from_csv' der Standard in der Tat war, dass' index_col = 0 'aber dies verursacht alle Arten von Chaos als csv die haben alle Arten von seltsamen Formaten so ist dieses Verhalten anders als 'read_csv'. Es ist ein guter Punkt und etwas, das es wert ist, als Verbesserung für [github] gepostet zu werden (https://github.com/pydata/pandas/issues) – EdChum

+0

Sagen wir, dass das reziproke ['from_csv'] ist (http: //pandas.pydata .org/pandas-docs/stable/generierte/pandas.DataFrame.from_csv.html # pandas.DataFrame.from_csv) aber es ist nicht mehr zu Gunsten der allgemeinen 'read_table' und' read_csv' aktualisiert, die mehr Flexibilität haben – EdChum

+0

Ich habe dies gelernt Der harte Weg mit read_excel, da es keinen Roundtrip gibt, zum Beispiel, wenn du ein multi-indexed Excel speicherst, wirst du es schwer haben, es wieder in einen Datenrahmen zu bekommen – Skorpeo

Antwort

2

Danke für den Tipp auf die github Seite @EdChum zu posten. Dies führte mich zu der pandas.DataFrame.from_csv Funktion, die in der Tat der Kehrwert von pandas.DataFrame.to_csv ist.

In [6]: final_df = pd.DataFrame.from_csv('test.csv') 

In [7]: final_df 
Out[7]: 
    AAA BBB CCC 
0 4 10 100 
1 5 20 50 
2 6 30 -30 
3 7 40 -50 

[4 rows x 3 columns] 
+0

Beachten Sie, dass 'from_csv' nicht mehr aktualisiert wird und daher eingeschränkter als' read_csv' ist – EdChum

+3

nicht wahr. from_csv ruft read_csv mit einigen definierten Argumenten auf – Jeff

Verwandte Themen