2016-07-07 41 views
6

Il pd.DataFrame docstring specifica un argomento scalare per tutta dataframe:inizializzare panda dataframe con dtypes definiti

dtype : dtype, default None Data type to force, otherwise infer

Apparentemente esso è infatti destinato ad essere uno scalare, come seguendo comporta un errore:

dfbinseq = pd.DataFrame([], 
         columns = ["chr", "centre", "seq_binary"], 
         dtype = ["O", pd.np.int64, "O"]) 

dfbinseq = pd.DataFrame([], 
         columns = ["chr", "centre", "seq_binary"], 
         dtype = [pd.np.object, pd.np.int64, pd.np.object]) 

L'unica soluzione per creare un frame di dati vuoto (che devo mettere in un negozio HDF5 per ulteriori append s) per me era

dfbinseq.centre.dtype = np.int64 

C'è un modo per impostare gli argomenti dtypes in una sola volta?

risposta

9

È possibile impostare dtype-Series:

import pandas as pd 

df = pd.DataFrame({'A':pd.Series([], dtype='str'), 
        'B':pd.Series([], dtype='int'), 
        'C':pd.Series([], dtype='float')}) 

print (df) 
Empty DataFrame 
Columns: [A, B, C] 
Index: [] 

print (df.dtypes) 
A  object 
B  int32 
C float64 
dtype: object 

Con i dati:

df = pd.DataFrame({'A':pd.Series([1,2,3], dtype='str'), 
        'B':pd.Series([4,5,6], dtype='int'), 
        'C':pd.Series([7,8,9], dtype='float')}) 

print (df) 
    A B C 
0 1 4 7.0 
1 2 5 8.0 
2 3 6 9.0 

print (df.dtypes) 
A  object 
B  int32 
C float64 
dtype: object