2016-07-17 3 views
0

大きなcsvファイルには、いくつかのバスネットワーク情報が含まれています。予期せぬ科学的な考え方

停止コードは、最後に特定の文字を含む大きな数字で構成されています。しかし、それらのいくつかは数字だけです。私がそれらをパンダに読み込むと、大きな数は科学的な考え方になります。 like

code_o lat_o lon_o code_d 
490016444HN 51.56878 0.1811568 490013271R 
490013271R 51.57493 0.1781319 490009721A 
490009721A 51.57708 0.1769355 490010407C 
490010407C 51.57947 0.1775409 490011659G 
490011659G 51.5806 0.1831088 490009810M 
490009810M 51.57947 0.1848733 490014448S 
490014448S 51.57751 0.185111 490001243Y 
490001243Y 51.57379 0.1839945 490013654S 
490013654S 51.57143 0.184776 490013482E 
490013482E 51.57107 0.187039 490015118E 
490015118E 51.5724 0.1923417 490011214E 
490011214E 51.57362 0.1959939 490006980E 
490006980E 51.57433 0.1999537 4.90E+09 
4.90E+09 51.57071 0.2087701 490003049E 
490003049E 51.5631 0.2146196 490004001A 
490004001A 51.56314 0.2165552 490015350F 

これらのタイプはオブジェクトですが、他のテーブルをクロスジョインするためには通常の数値にする必要があります。

この列は 'int'または 'float'ではないため、列全体で変更することはできません。

提案がありますか?最後に手紙を捨て、あなたはその列を解析することができます

import numpy as np 
import pandas as pd 

df = pd.read_csv('your_original_file.csv', dtype={'code_d': 'object'}) 

は私が

https://www.dropbox.com/s/jhbxsncd97rq1z4/gtfs_OD_links_L.csv?dl=0 
+0

実際に数値にするか、文字列であるかのように文字列にしますか? – BrenBarn

+0

ファイル全体へのリンクではなく、csvファイルからいくつかの行を投稿してください。私(そして他の多くの人)は、ウィルス、マルウェア、その他の雑草など、Interwebzから未知のファイルをダウンロードしたくない。 –

+0

私は彼らが参加するための将来の鍵になるために文字列にして欲しいです。 –

答えて

0

IIUCは、インポート時にcode_d列にobjectタイプを強制的にしようとのDropboxからファイルを添付しました結果を整数型にキャストする:

df['code_d'] = df['code_d'].str[:-1].astype(np.int) 
+0

動作しません。 ValueError:基数10のlong()のリテラルが無効です: '490016444H' df ['code_d'] = df ['code_d']。str [:-1] .astype(np.int)最初の行を参照します。 ValueError:基数10のlong()に対して無効なリテラルが返されます: '4.90E + ' –

+0

pandas DataFrameにインポートする前に対応する行*を投稿してください。また、 '490016444H'は' code_o'カラムではなく、 'code_d'カラムにあります。 –

+0

これは、1つではなく2つの文字が末尾にある唯一のケースです。あなたが正しく物を定義することなく、あなたの質問に答えることは不可能です。 –

0

単純なままにしてください:df=pd.read_csv('myfile.csv',dtype=str)そしてそれはすべてを文字列として読み込みます。または、@Albertoが列だけを指定して投稿したように:df=pd.read_csv('myfile.csv',dtype={'code_o':str})

関連する問題