2016-10-01 6 views
2

CSVデータをpandas DataFrameにインポートする際に、欠落しているデータの問題に対する満足のいく解決策が見つかりませんでした。Pandasでデータが欠落しているread_csv

私はデータセットを持っています。カラムやデータタイプがであるかどうかはわかりません。私はパンダに、データの読み方を推測するより良い仕事をしたいと思います。

本当に助けてくれるna_values=...の組み合わせは見つかりませんでした。

次のCSVファイルを考えてみましょう:

no_holes.csv

letter,number 
a,1 
b,2 
c,3 
d,4 

letter,number a,1 ,2 b, ,4 

with_holes.csv empty_column.csv

letters,numbers 
,1 
,2 
,3 
,4 

with_NA.csvここ

letter,number 
a,1 
b,NA 
NA,3 
d,4 

は、私がデータフレーム(以下コード)にそれらを読んだときに何が起こるかです:

**no holes** 
    letter number 
0  a  1 
1  b  2 
2  c  3 
3  d  4 
letter object 
number  int64 
dtype: object 

**with holes** 
    letter number 
0  a  1 
1 NaN  2 
2  b  
3 NaN  4 
letter object 
number object 
dtype: object 

**empty_column** 
    letters numbers 
0  NaN  1 
1  NaN  2 
2  NaN  3 
3  NaN  4 
letters float64 
numbers  int64 
dtype: object 

**with NA** 
    letter number 
0  a  1.0 
1  b  NaN 
2 NaN  3.0 
3  d  4.0 
letter  object 
number float64 
dtype: object 

空仮定するパンダを伝える方法があります値はobjectタイプですか?私はna_values=[""]を試しました。

demo_holes.py

import pandas as pd 

with_holes = pd.read_csv("with_holes.csv") 
no_holes = pd.read_csv("no_holes.csv") 
empty_column = pd.read_csv("empty_column.csv") 
with_NA = pd.read_csv("with_NA.csv") 

print("\n**no holes**") 
print(no_holes.head()) 
print(no_holes.dtypes) 
print("\n**with holes**") 
print(with_holes.head()) 
print(with_holes.dtypes) 
print("\n**empty_column**") 
print(empty_column.head()) 
print(empty_column.dtypes) 
print("\n**with NA**") 
print(with_NA.head()) 
print(with_NA.dtypes) 
+0

を使用しています。 – HYRY

答えて

2

あなたはパラメータskipinitialspace=True

セットアップ

no_holes = """letter,number 
a,1 
b,2 
c,3 
d,4""" 

with_holes = """letter,number 
a,1 
,2 
b, 
,4""" 

empty_column = """letters,numbers 
,1 
,2 
,3 
,4""" 

with_NA = """letter,number 
a,1 
b,NA 
NA,3 
d,4""" 

from StringIO import StringIO 
import pandas as pd 

d1 = pd.read_csv(StringIO(no_holes), skipinitialspace=True) 
d2 = pd.read_csv(StringIO(with_holes), skipinitialspace=True) 
d3 = pd.read_csv(StringIO(empty_column), skipinitialspace=True) 
d4 = pd.read_csv(StringIO(with_NA), skipinitialspace=True) 

pd.concat([d1, d2, d3, d4], axis=1, 
      keys=['no_holes', 'with_holes', 
       'empty_column', 'with_NA']) 

enter image description here

を使用したいです

あなたが''であることを、これらのNaN秒をしたいならば、1つのスペース文字で、 `」「=` na_valuesを試してみてくださいfillna

d1 = pd.read_csv(StringIO(no_holes), skipinitialspace=True).fillna('') 
d2 = pd.read_csv(StringIO(with_holes), skipinitialspace=True).fillna('') 
d3 = pd.read_csv(StringIO(empty_column), skipinitialspace=True).fillna('') 
d4 = pd.read_csv(StringIO(with_NA), skipinitialspace=True).fillna('') 

pd.concat([d1, d2, d3, d4], axis=1, 
      keys=['no_holes', 'with_holes', 
       'empty_column', 'with_NA']) 

enter image description here

関連する問題