2017-12-18 33 views
0

pandasデータフレームで使用するためにcsvファイルからデータをインポートしています。私のデータファイルには102行と5列があり、それらはすべてExcelで「番号」として明確にラベル付けされています。次のように私のコードは次のとおりです。pandasデータフレームがすべてのデータをNaNとして解釈するのはなぜですか?

import pandas as pd 

data = pd.read_csv('uni.csv', header=None, names = ['TopThird', 'Oxbridge', 'Russell', 'Other', 'Low']) 

print data.head() 

出力は次のようになります。

  TopThird Oxbridge Russell Other Low 
0 14\t1\t12\t35\t1  NaN  NaN NaN NaN 
1 14\t1\t12\t32\t0  NaN  NaN NaN NaN 
2 16\t0\t13\t33\t0  NaN  NaN NaN NaN 
3 10\t0\t9\t44\t1  NaN  NaN NaN NaN 
4 18\t1\t13\t28\t1  NaN  NaN NaN NaN 

そして、これは、データフレームの一番下まで続きます。 Excelのセルタイプを 'General'に変更しようとしましたが、 'Number'タイプの小数点を使用しましたが、これは何も変更されていません。

どうしてですか?どのように予防することができますか?

+0

右のセパレータを通過しました。 'delim_whitespace = True'を' read_csv'に追加してください。 –

+0

また、TSVとして、 'pd.read_fwf(...)'を使うことができます。 –

+0

@cᴏʟᴅsᴘᴇᴇᴅありがとう、最初の作品です。何か説明をつけたいのであれば、答えとして投稿してください。 – user7490953

答えて

1

を試してみてください。 read_csvに、空白文字を区切り文字として扱っていることを明示的に伝える必要があります。

ほとんどの場合、sep='\t'を渡す必要があります。

df = pd.read_csv('uni.csv', 
       sep='\t', 
       header=None, 
       names=['TopThird', 'Oxbridge', 'Russell', 'Other', 'Low']) 

ただし、列が完全にタブで区切られていない場合があります。 sep='\s+'と同等であり、注意して使用し、もう少し一般化である

df = pd.read_csv('uni.csv', 
       delim_whitespace=True, 
       header=None, 
       names=['TopThird', 'Oxbridge', 'Russell', 'Other', 'Low']) 

- あなたは数字のTSVを持っていると仮定すると、delim_whitespace=Trueを使用して大丈夫でなければなりません。上の方に、列に空白の空白がある場合は、これが自動的に処理されます。


@Vaishaliで述べたように、幅TSVファイルのために有用である代替機能pd.read_tableがあります、そしてあなたがread_csvに渡された同じ引数で動作します - あなたが持っていないので

df = pd.read_table('uni.csv', header=None, names=[...]) 
0

タブ区切りのデータのように見えます。あなたのファイルがタブ区切りのファイルであるように思えsep='\t'

data = pd.read_csv('uni.csv', sep='\t', header=None, names = ['TopThird', 'Oxbridge', 'Russell', 'Other', 'Low'])