43

pandasread_csvメソッドを使用して、スペースで区切られた単純なファイルを読み込もうとしています。しかし、パンダは私のdtype主張に従っていないようです。多分私はそれを間違って指定していますか?

read_csvこの単純なテスト ケースへのやや複雑な呼び出しを要約しました。私は実際にconverters「実際の」シナリオで引数を使用していますが、簡単にするためにこれを削除しました。

以下は私のipythonセッションです:

>>> cat test.out
a b
0.76398 0.81394
0.32136 0.91063
>>> import pandas
>>> import numpy
>>> x = pandas.read_csv('test.out', dtype={'a': numpy.float32}, delim_whitespace=True)
>>> x
         a        b
0  0.76398  0.81394
1  0.32136  0.91063
>>> x.a.dtype
dtype('float64')

dtypeこれをofnumpy.int32またはで使用してこれも試しましたnumpy.int64。これらを選択すると、例外が発生します。

AttributeError: 'NoneType' object has no attribute 'dtype'

AttributeErrorパンダが浮動小数点値を整数に自動的に変換/切り捨てようとしないためだと思いますか?

32 ビット バージョンの Python を搭載した 32 ビット マシンで実行しています。

>>> !uname -a
Linux ubuntu 3.0.0-13-generic #22-Ubuntu SMP Wed Nov 2 13:25:36 UTC 2011 i686 i686 i386 GNU/Linux
>>> import platform
>>> platform.architecture()
('32bit', 'ELF')
>>> pandas.__version__
'0.10.1'
4

2 に答える 2

26

0.10.1 は float32 をあまりサポートしていません

これを参照してくださいhttp://pandas.pydata.org/pandas-docs/dev/whatsnew.html#dtype-specification

次のように 0.11 でこれを行うことができます。

# dont' use dtype converters explicity for the columns you care about
# they will be converted to float64 if possible, or object if they cannot
df = pd.read_csv('test.csv'.....)

#### this is optional and related to the issue you posted ####
# force anything that is not a numeric to nan
# columns are the list of columns that you are interesetd in
df[columns] = df[columns].convert_objects(convert_numeric=True)


    # astype
    df[columns] = df[columns].astype('float32')

see http://pandas.pydata.org/pandas-docs/dev/basics.html#object-conversion

Its not as efficient as doing it directly in read_csv (but that requires
 some low-level changes)

0.11-dev で動作することを確認しました (32 ビットでも 64 ビットでも結果は同じです)。

In [5]: x = pd.read_csv(StringIO.StringIO(data), dtype={'a': np.float32}, delim_whitespace=True)

In [6]: x
Out[6]: 
         a        b
0  0.76398  0.81394
1  0.32136  0.91063

In [7]: x.dtypes
Out[7]: 
a    float32
b    float64
dtype: object

In [8]: pd.__version__
Out[8]: '0.11.0.dev-385ff82'

In [9]: quit()
vagrant@precise32:~/pandas$ uname -a
Linux precise32 3.2.0-23-generic-pae #36-Ubuntu SMP Tue Apr 10 22:19:09 UTC 2012 i686 i686 i386 GNU/Linux
于 2013-03-04T23:33:05.293 に答える
7
In [22]: df.a.dtype = pd.np.float32

In [23]: df.a.dtype
Out[23]: dtype('float32')

上記は、パンダ0.10.1の下でうまく機能します

于 2013-03-05T09:38:10.550 に答える