2016-12-14 24 views
0

我已經下載了一個csv文件,然後將其讀取到python dataframe,現在所有4列都有對象類型,我想將它們轉換爲str類型,無法將列類型從對象轉換爲Python數據框中的字符

enter image description here

現在dtypes的結果如下:

Name      object 
Position Title   object 
Department    object 
Employee Annual Salary object 
dtype: object 

我嘗試使用以下方法來改變類型:

path['Employee Annual Salary'] = path['Employee Annual Salary'].astype(str) 

但dtypes仍返回類型的對象, 我也嘗試閱讀CSV時提供列類型,

path = pd.read_csv("C:\\Users\\IBM_ADMIN\\Desktop\\ml-1m\\city-of-chicago-salaries.csv",dtype={'Employee Annual Salary':str}) 

path = pd.read_csv("C:\\Users\\IBM_ADMIN\\Desktop\\ml-1m\\city-of-chicago-salaries.csv",dtype=str) 

,但仍然不工作, 想知道如何將列類型從對象更改爲str,

+0

可能的重複http://stackoverflow.com/questions/21018654/strings-in-a-dataframe-but-dtype-is-object – Owen

+0

該鏈接對我有幫助,那麼另一個問題是:如何刪除Employee Annual Salary列中的'$',然後將其轉換爲浮點型? – tonyibm

+0

我發現它沒有使用replace的原因,正確的方法是:path ['Employee Annual Salary'] = path ['Employee Annual Salary']。str.replace('$',''),我didn' t在前面更換str, – tonyibm

回答

1

對於字符串,列類型將始終爲「對象」。你不需要轉換任何東西;它已經在做你所需要的。

類型來自numpy,它有一組數字數據類型。其他任何東西都是一個對象。

您可能想要閱讀http://nbviewer.jupyter.org/github/jakevdp/PythonDataScienceHandbook/blob/master/notebooks/02.01-Understanding-Data-Types.ipynb以獲得更全面的解釋。

+0

我試圖從員工年薪中刪除'$',如果我直接使用替換,它不起作用, – tonyibm

+0

對象實際上是str,所以不需要將它轉換爲str類型, – tonyibm

1

我認爲astype工作,只是你不能看到更改查看dtypes的結果。例如,

import pandas 
data = [{'Name': 'Schmoe, Joe', 'Position Title': 'Dude', 'Department': 'Zip', 'Employee Annual Salary': 200000.00}, 
     {'Name': 'Schmoe, Jill', 'Position Title': 'Dudette', 'Department': 'Zam', 'Employee Annual Salary': 300000.00}, 
     {'Name': 'Schmoe, John', 'Position Title': 'The Man', 'Department': 'Piz', 'Employee Annual Salary': 100000.00}, 
     {'Name': 'Schmoe, Julie', 'Position Title': 'The Woman', 'Department': 'Maz', 'Employee Annual Salary': 150000.00}] 
df = pandas.DataFrame.from_records(data, columns=['Name', 'Position Title', 'Department', 'Employee Annual Salary']) 

現在,如果我做DF dtypes我看到:

In [32]: df.dtypes 
Out[32]: 
Name      object 
Position Title    object 
Department     object 
Employee Annual Salary float64 
dtype: object 

現在,如果我這樣做,

In [33]: df.astype(str)['Employee Annual Salary'].map(lambda x: type(x)) 
Out[33]: 
0 <type 'str'> 
1 <type 'str'> 
2 <type 'str'> 
3 <type 'str'> 
Name: Employee Annual Salary, dtype: object 

我看到我所有的工資值現在浮即使dtype顯示爲一列。

所以底線是,我認爲你很好。

+0

Employee年薪一欄有'$',我想刪除它,在我使用replace之後,它不起作用, – tonyibm

+0

對象實際上是str,所以不需要用astype將它轉換爲str, – tonyibm

相關問題