因此,我正在從NOAA讀取站代碼csv文件,如下所示:"USAF","WBAN","STATION NAME","CTRY","FIPS","STATE","CALL","LAT","LON","ELEV(.1M)","BEGIN","END""006852","99999","SENT","SW","SZ","","","+46817","+010350","+14200","","""007005","99999","CWOS 07005","","","","","-99999","-999999","-99999","20120127","20120127"前兩列包含氣象站代碼,有時(shí)它們的前導(dǎo)零。當(dāng)熊貓?jiān)谖粗付╠type的情況下導(dǎo)入它們時(shí),它們將變成整數(shù)。沒什么大不了的,因?yàn)槲铱梢员闅v數(shù)據(jù)框索引并用類似的東西替換它們,"%06d" % i因?yàn)樗鼈兪冀K是六位數(shù),但是您知道...這是懶惰的方式。使用以下代碼獲取csv:file = urllib.urlopen(r"ftp://ftp.ncdc.noaa.gov/pub/data/inventories/ISH-HISTORY.CSV")output = open('Station Codes.csv','wb')output.write(file.read())output.close()一切都很好,但是當(dāng)我去嘗試使用以下方法閱讀它時(shí):import pandas as pddf = pd.io.parsers.read_csv("Station Codes.csv",dtype={'USAF': np.str, 'WBAN': np.str})或者import pandas as pddf = pd.io.parsers.read_csv("Station Codes.csv",dtype={'USAF': str, 'WBAN': str})我收到一個(gè)討厭的錯(cuò)誤消息:File "C:\Python27\lib\site-packages\pandas-0.11.0-py2.7-win32.egg\pandas\io\parsers.py", line 401, in parser_f return _read(filepath_or_buffer, kwds) File "C:\Python27\lib\site-packages\pandas-0.11.0-py2.7-win32.egg\pandas\io\parsers.py", line 216, in _read return parser.read() File "C:\Python27\lib\site-packages\pandas-0.11.0-py2.7-win32.egg\pandas\io\parsers.py", line 633, in read ret = self._engine.read(nrows) File "C:\Python27\lib\site-packages\pandas-0.11.0-py2.7-win32.egg\pandas\io\parsers.py", line 957, in read data = self._reader.read(nrows) File "parser.pyx", line 654, in pandas._parser.TextReader.read (pandas\src\parser.c:5931) File "parser.pyx", line 676, in pandas._parser.TextReader._read_low_memory (pandas\src\parser.c:6148) File "parser.pyx", line 752, in pandas._parser.TextReader._read_rows (pandas\src\parser.c:6962) File "parser.pyx", line 837, in pandas._parser.TextReader._convert_column_data (pandas\src\parser.c:7898)這是一個(gè)相當(dāng)大的csv(3萬1千行),所以也許與此有關(guān)嗎?
3 回答

溫溫醬
TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊
這個(gè)問題讓我在解析帶有序列號(hào)的文件時(shí)遇到了種種麻煩。出于未知原因,00794和000794是兩個(gè)不同的序列號(hào)。我最終想出了
converters = {'serial_number': str}

達(dá)令說
TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個(gè)贊
如果您不希望字符串成為對(duì)象,則似乎必須指定字符串的長度。
例如:
dtype={'USAF': '|S6'}
我找不到相關(guān)的參考,但我似乎想起了Wes在討論這個(gè)問題(也許是在談話中)。他建議numpy不允許使用“適當(dāng)?shù)摹笨勺冮L度的字符串(請(qǐng)參閱此問題/答案),并且使用最大長度填充數(shù)組通常會(huì)導(dǎo)致空間效率低下(即使字符串較短,它也會(huì)使用與最長的字符串一樣多的空間)。
正如@Wes指出的,這也是以下情況:
dtype={'USAF': object}
效果也一樣。
添加回答
舉報(bào)
0/150
提交
取消