Verwenden Sie append=True
, um to_hdf
anzuweisen, neue Chunks an dieselbe Datei anzuhängen.
df.to_hdf('file_csv.hdf', ..., append=True)
Andernfalls überschreibt jeder Anruf den vorherigen Inhalt und nur der letzte Brocken bleibt in file_csv.hdf
gespeichert.
import os
import numpy as np
import pandas as pd
np.random.seed(2016)
df = pd.DataFrame(np.random.randint(10, size=(100, 2)), columns=list('AB'))
df.to_csv('file_csv.csv')
if os.path.exists('file_csv.hdf'): os.unlink('file_csv.hdf')
for i, df in enumerate(pd.read_csv('file_csv.csv', chunksize=50)):
print('Saving {} chunk...'.format(i), end='')
df.to_hdf('file_csv.hdf',
'file_csv',
format='table',
data_columns=True,
append=True)
print('Done!')
print(df.loc[df['A']==1])
print('-'*80)
df_hdf = pd.read_hdf('file_csv.hdf', where="A=1")
print(df_hdf)
druckt
Unnamed: 0 A B
22 22 1 7
30 30 1 7
41 41 1 9
44 44 1 0
19 69 1 3
29 79 1 1
31 81 1 5
34 84 1 6
Verwenden append=True
to_hdf
zu sagen, neue Stücke auf die gleiche Datei anhängen. Ansonsten wird nur der letzte Brocken in file_csv.hdf
gespeichert:
import os
import numpy as np
import pandas as pd
np.random.seed(2016)
df = pd.DataFrame(np.random.randint(10, size=(100, 2)), columns=list('AB'))
df.to_csv('file_csv.csv')
if os.path.exists('file_csv.hdf'): os.unlink('file_csv.hdf')
for i, df in enumerate(pd.read_csv('file_csv.csv', chunksize=50)):
print('Saving {} chunk...'.format(i), end='')
df.to_hdf('file_csv.hdf',
'file_csv',
format='table',
data_columns=True,
append=True)
print('Done!')
print(df.loc[df['A']==1])
print('-'*80)
df_hdf = pd.read_hdf('file_csv.hdf', where="A=1")
print(df_hdf)
druckt
Unnamed: 0 A B
22 22 1 7
30 30 1 7
41 41 1 9
44 44 1 0
19 69 1 3
29 79 1 1
31 81 1 5
34 84 1 6
können Sie zeigen die Ausgabe von 'df_hdf.info()' 'count' zählt die Anzahl der Nicht-NaN Beobachtungen, die ist nicht unbedingt die gleiche wie die Anzahl der Zeilen – EdChum
Sie müssen append = True – Jeff