我正在使用read_csv
將研究數據導入熊貓數據框。pandas csv-import:保留前導零列
我的科目代碼是6位數字編碼,其中包括出生當天。對於我的一些主題,這會導致代碼的前導零(例如「010816」)。
當我導入熊貓時,前導零被刪除,並且該列被格式化爲int64
。
有沒有辦法導入這個列不變,也許作爲一個字符串?
我嘗試使用自定義轉換器的列,但它不工作 - 它似乎自定義轉換髮生之前熊貓轉換爲int。
我正在使用read_csv
將研究數據導入熊貓數據框。pandas csv-import:保留前導零列
我的科目代碼是6位數字編碼,其中包括出生當天。對於我的一些主題,這會導致代碼的前導零(例如「010816」)。
當我導入熊貓時,前導零被刪除,並且該列被格式化爲int64
。
有沒有辦法導入這個列不變,也許作爲一個字符串?
我嘗試使用自定義轉換器的列,但它不工作 - 它似乎自定義轉換髮生之前熊貓轉換爲int。
我不認爲你可以按照你想要的方式指定一個列類型(如果沒有改變,或者6位數字不是你可以轉換爲日期時間的日期)。您可以嘗試使用np.genfromtxt()
並從那裏創建DataFrame
。
編輯:看看Wes Mckinney的blog,有可能是你的東西。這似乎是在11月份有一個來自pandas 0.10
的新解析器。
我提出了一個github問題:https://github.com/pydata/pandas/issues/2184 –
@ Chang She - https:// github.com/pydata/pandas/issues/926 – root
該問題中的功能現在已在c語法分析器分支上完成,並且應該在0.10。我剛剛爲#2184號問題做了一個快速的處理,並且很快將會包含在0.9.1中。但是,是的,使用dtypes應該是這裏的首選行爲,所以只需在一個月左右時間內留意0.10。 –
如this question/answer的Lev 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.20.2 –
這裏是更短的,穩健和完全工作溶液:
簡單地定義一個映射(字典)變量名和所希望的數據類型之間:
dtype_dic= {'subject_id': str,
'subject_number' : 'float'}
使用那個映射與pd.read_csv()
:
df = pd.read_csv(yourdata, dtype = dtype_dic)
et瞧!
[Pandas read \ _csv dtype leading zeros]的可能重複(http:// stackoverflow。com/questions/16929056/pandas-read-csv-dtype-leading-zeros) – firelynx