wake-up-neo.com

python Pandas führen mehrere CSV-Dateien zusammen

Ich habe ungefähr 600 CSV-Dateisätze, alle haben die gleichen Spaltennamen ["DateTime", "Actual", "Consensus", "Previous", "Revised"], alle wirtschaftlichen Indikatoren und Datensätze der Zeitreihen.

ziel ist es, sie alle in einer CSV-Datei zusammenzuführen.

Mit "DateTime" als Index.

Die Art und Weise, in der diese Datei indiziert werden soll, ist die Zeitleiste. Das heißt, das erste Ereignis in der ersten CSV vom 18.12.2017 um 10:00:00 Uhr und das erste Ereignis in der zweiten CSV vom 29.12. 2017 09:00:00 und erste Veranstaltung in der dritten csv vom 20.12.2017 09:00:00.

Also, ich möchte sie erst später und die neuere nachher usw. indizieren, obwohl die Quell-CSV ursprünglich von ihr stammt.

Ich habe versucht, nur drei von ihnen als Experiment zusammenzuführen, und das Problem ist die 'DateTime', weil sie die 3 von ihnen so zusammen druckt ('12/18/2017 10:00:00 ', '12/29/2017 09.) : 00: 00 ', '12/20/2017 09:00:00') .__ Hier ist der Code:

import pandas as pd


df1 = pd.read_csv("E:\Business\Economic Indicators\Consumer Price Index - Core (YoY) - European Monetary Union.csv")
df2 = pd.read_csv("E:\Business\Economic Indicators\Private loans (YoY) - European Monetary Union.csv")
df3 = pd.read_csv("E:\Business\Economic Indicators\Current Account s.a - European Monetary Union.csv")

df = pd.concat([df1, df2, df3], axis=1, join='inner')
df.set_index('DateTime', inplace=True)

print(df.head())
df.to_csv('df.csv')
5
Sayed Gouda

Verwenden Sie read_csv() args, index_col und parse_dates, um Indizes während des Imports zu erstellen und als datetime zu formatieren. Führen Sie dann die erforderliche horizontale Zusammenführung aus. Das folgende Datum wird in der ersten Spalte von csv angegeben. Und am Ende verwenden Sie sort_index() am letzten Datenrahmen, um die Datumszeiten zu sortieren.

df1 = pd.read_csv(r"E:\Business\Economic Indicators\Consumer Price Index - Core (YoY) - European Monetary Union.csv",
                  index_col=[0], parse_dates=[0])
df2 = pd.read_csv(r"E:\Business\Economic Indicators\Private loans (YoY) - European Monetary Union.csv",
                  index_col=[0], parse_dates=[0])
df3 = pd.read_csv(r"E:\Business\Economic Indicators\Current Account s.a - European Monetary Union.csv",
                  index_col=[0], parse_dates=[0])

finaldf = pd.concat([df1, df2, df3], axis=1, join='inner').sort_index()

Und für den DRY-er-Ansatz, besonders bei Hunderten von CSV-Dateien, sollten Sie ein Listenverständnis verwenden

import os
...
os.chdir('E:\\Business\\Economic Indicators')

dfs = [pd.read_csv(f, index_col=[0], parse_dates=[0])
        for f in os.listdir(os.getcwd()) if f.endswith('csv')]

finaldf = pd.concat(dfs, axis=1, join='inner').sort_index()
6
Parfait

Sie versuchen, ein großes Datenframe aus den Zeilen vieler Dataframes zu erstellen, die alle dieselben Spaltennamen haben. axis sollte 0 (Standard) sein, nicht 1. Außerdem müssen Sie keinen Join-Typ angeben. Dies hat keine Auswirkungen, da die Spaltennamen für jeden Datenrahmen gleich sind.

df = pd.concat([df1, df2, df3])

sollte ausreichen, um die Datensätze zu verketten.

(siehe https://pandas.pydata.org/pandas-docs/stable/merging.html )

Ihr Aufruf an set_index zum Definieren eines Index mit den Werten in der Spalte DateTime sollte dann funktionieren.

2

Das Problem besteht aus zwei Aspekten: Zusammenführen der CSV-Datei in einem einzelnen Datenrahmen und anschließendes Sortieren nach Datum.

Wie John Smith darauf hingewiesen hat, Datenframes entlang Zeilen zusammenzuführen, müssen Sie Folgendes verwenden:

df = pd.concat([df1,df2,df3])

Dann möchten Sie einen Index festlegen und Ihren Datenrahmen gemäß dem Index neu anordnen. 

df.set_index('DateTime', inplace=True)
df.sort_index(inplace=True)

oder in absteigender Reihenfolge

df.sort_index(inplace=True,ascending=False)

(siehe https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sort_index.html )


timeindex = pd.date_range('2018/01/01','2018/01/10')
randtimeindex = np.random.permutation(timeindex)
# Create three dataframes
df1 = pd.DataFrame(index=range(3),data=np.random.Rand(3,3),
                columns=['Actual','Consensus','DateTime'])
df1.DateTime=randtimeindex[:3]
df2 = pd.DataFrame(index=range(3),data=np.random.Rand(3,3),
                columns=['Actual','Consensus','DateTime'])
df2.DateTime=randtimeindex[3:6]
df3 = pd.DataFrame(index=range(4),data=np.random.Rand(4,3),
                columns=['Actual','Consensus','DateTime'])
df3.DateTime=randtimeindex[6:]

# Merge them
df4 = pd.concat([df1, df2, df3], axis=0)

# Reindex the merged dataframe, and sort it
df4.set_index('DateTime', inplace=True)
df4.sort_index(inplace=True, ascending=False)

print(df4.head())
0
bolirev