2016-07-07 11 views
6

pd.DataFrame docstring określa skalarnego argumentu dla całej dataframe:zainicjować pandy DataFrame ze zdefiniowanymi dtypes

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

Pozornie jest on rzeczywiście ma być skalarne, jak następujący prowadzi do błędu:

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]) 

Jedynym sposobem obejścia problemu z utworzeniem pustej ramki danych (którą muszę umieścić w sklepie HDF5 dla dalszych append s) było dla mnie

dfbinseq.centre.dtype = np.int64 

Czy istnieje sposób na ustawienie argumentów dtypes na raz?

Odpowiedz

9

Można ustawić dtype do 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 

Z danych:

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