2017-08-31 135 views
0

我想更改可以輸入到空Pandas數據框中的數據類型。所以我嘗試了以下方法,但它不起作用。 有人請給我一個提示如何解決這個問題?爲熊貓DataFrame中的每列指定數據類型 - Python

columns=['A', 'B', 'C', 'D', 'E','F'] 


df = pd.DataFrame(columns=columns) 

>>> df 
Empty DataFrame 
Columns: [A, B, C, D, E, F] 
Index: [] 

df[[0]]=df[[0]].astype(str) 
df[[1]]=df[[1]].astype(str) 
df[[2]]=df[[2]].astype(int) 
df.iloc[:,3:6]=df.iloc[:,3:6].astype(float) 
+0

在你最少的樣品,你指定的某些列列表,然後將所得DF不顯示這些列,爲什麼這對空df有影響?一旦你將數據分配給這些列,dtype就會被改變 – EdChum

+0

我認爲只有通過像'df = pd.DataFrame(columns = columns,dtype = str)' – jezrael

+0

這樣的構造函數才能在所有列中設置相同的dtype。 [文檔描述](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html) 所以'df = pd.DataFrame(columns = columns,dtype = str)'會給'df​​.dtypes'作爲'objects' –

回答

0

默認情況下,所有列都是'對象'類型,因此您可能不需要強制列的類型爲字符串。對於其他列類型,這樣的東西可能會工作?

df[['C']] = df[['C']].apply(pd.to_numeric) 
1

你想構建一系列或字典,你想要的類型,然後使用astype

columns = list('ABCDEF') 
df = pd.DataFrame(columns=columns) 

dtypes = {k: str for k in columns[:2]} 
dtypes.update({columns[2]: int}) 
dtypes.update({k: float for k in columns[3:]}) 

df = df.astype(dtypes) 

df.dtypes 

A  object 
B  object 
C  int64 
D float64 
E float64 
F float64 
dtype: object