0

固定幅のフラットファイルからデータフレームを読み取りたい。これはややパフォーマンスに敏感な操作です。

すべての空白の空白を列の値から削除したいと思います。その空白が削除された後、空白の文字列をNaNまたはNone値に変換する必要があります。これが私が持っていた2つのアイデアです:

pd.read_fwf(path, colspecs=markers, names=columns,
            converters=create_convert_dict(columns))

def create_convert_dict(columns):
    convert_dict = {}
    for col in columns:
        convert_dict[col] = null_convert
        return convert_dict

def null_convert(value):
    value = value.strip()
    if value == "":
        return None
    else:
        return value

また:

pd.read_fwf(path, colspecs=markers, names=columns, na_values='',
            converters=create_convert_dict(columns))

def create_convert_dict(columns):
    convert_dict = {}
    for col in columns:
        convert_dict[col] = col_strip
    return convert_dict

def col_strip(value):
    return value.strip()

2番目のオプションは、na_valuesの前に評価されるコンバーター(空白を取り除く)に依存します。

私は2番目のものがうまくいくかどうか疑問に思いました。私が興味を持っている理由は、保持する方がNoneとは反対NaNの値を持っているように見えるからです。Null

また、この操作を実行する方法(空白を削除してから、空白の文字列をNaNに変換する方法)に関する他の提案も受け付けています。

現在、パンダがインストールされているコンピューターにアクセスできないため、自分でテストすることはできません。

4

1 に答える 1

1

固定幅のファイルの場合、空白を削除したり、欠落しているフィールドを処理したりするために特別なことをする必要はありません。固定幅ファイルの小さな例の下に、それぞれ幅5の3つの列があります。末尾と先頭の空白+欠落データがあります。

In [57]: data = """\
A    B     C     
 0    foo       
3    bar     2.0
  1        3.0
"""

In [58]: df = pandas.read_fwf(StringIO(data), widths=[5, 5, 5])

In [59]: df
Out[59]: 
   A    B   C
0  0  foo NaN
1  3  bar   2
2  1  NaN   3

In [60]: df.dtypes
Out[60]: 
A      int64
B     object
C    float64
于 2012-08-28T11:04:06.663 に答える