2012-11-06 82 views
25

我正在使用read_csv將研究數據導入熊貓數據框。pandas csv-import:保留前導零列

我的科目代碼是6位數字編碼,其中包括出生當天。對於我的一些主題,這會導致代碼的前導零(例如「010816」)。

當我導入熊貓時,前導零被刪除,並且該列被格式化爲int64

有沒有辦法導入這個列不變,也許作爲一個字符串?

我嘗試使用自定義轉換器的列,但它不工作 - 它似乎自定義轉換髮生之前熊貓轉換爲int。

+0

[Pandas read \ _csv dtype leading zeros]的可能重複(http:// stackoverflow。com/questions/16929056/pandas-read-csv-dtype-leading-zeros) – firelynx

回答

0

我不認爲你可以按照你想要的方式指定一個列類型(如果沒有改變,或者6位數字不是你可以轉換爲日期時間的日期)。您可以嘗試使用np.genfromtxt()並從那裏創建DataFrame

編輯:看看Wes Mckinney的blog,有可能是你的東西。這似乎是在11月份有一個來自pandas 0.10的新解析器。

+0

我提出了一個github問題:https://github.com/pydata/pandas/issues/2184 –

+0

@ Chang She - https:// github.com/pydata/pandas/issues/926 – root

+0

該問題中的功能現在已在c語法分析器分支上完成,並且應該在0.10。我剛剛爲#2184號問題做了一個快速的處理,並且很快將會包含在0.9.1中。但是,是的,使用dtypes應該是這裏的首選行爲,所以只需在一個月左右時間內留意0.10。 –

22

this question/answerLev Landau所示,對於read_csv函數中的某個列可以使用converters選項。

converters={'column_name': lambda x: str(x)} 

你可以參考read_csv funtion的更多選項pandas.io.parsers.read_csv documentation

可以說我有csv文件projects.csv象下面這樣:

project_name,project_id 
Some Project,000245 
Another Project,000478 

至於例如下面的代碼是修邊前導零:

import csv 
from pandas import read_csv 

dataframe = read_csv('projects.csv') 
print dataframe 

結果:

[email protected]:~$ python test_dataframe.py 
     project_name project_id 
0  Some Project   245 
1 Another Project   478 
[email protected]:~$ 

解決方案的代碼示例:

import csv 
from pandas import read_csv 

dataframe = read_csv('projects.csv', converters={'project_id': lambda x: str(x)}) 
print dataframe 

所需的結果:

[email protected]:~$ python test_dataframe.py 
     project_name project_id 
0  Some Project  000245 
1 Another Project  000478 
[email protected]:~$ 
+0

不適用於熊貓== 0.20.2 –

7

這裏是更短的,穩健和完全工作溶液:

簡單地定義一個映射(字典)變量名和所希望的數據類型之間:

dtype_dic= {'subject_id': str, 
      'subject_number' : 'float'} 

使用那個映射與pd.read_csv()

df = pd.read_csv(yourdata, dtype = dtype_dic) 

et瞧!

+0

您還可以包括許多其他數據類型,「浮動」和其他。我相信這是最具熊貓氣的解決方案 –

+0

簡單而重要。我喜歡它!謝謝你,先生! – racl101

+0

不適用於熊貓== 0.20.2 –