3

デフォルトの列名でファイルを読み取る場合、後でそれらを呼び出すにはどうすればよいですか? df[1]ほぼ常に機能しているようです。ただし、次のような条件を記述すると、型について不平を言います。

In [60]: cond = ((df[1] != node) & (df[2] != deco))
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/home/ferreirafm/work/colab/SNP/rawdata/<ipython-input-60-513a433bfeb5> in <module>()
----> 1 cond = ((df[1] != node) & (df[2] != deco))

/usr/lib64/python2.7/site-packages/pandas/core/series.pyc in wrapper(self, other)
140             if np.isscalar(res):
141                 raise TypeError('Could not compare %s type with Series'
--> 142                                 % type(other))
143             return Series(na_op(values, other),
144                           index=self.index, name=self.name)

TypeError: Could not compare <type 'str'> type with Series

私のアプリケーションには、デフォルト名でデータフレーム列を扱う方が適切です。

4

2 に答える 2

2

私は pandas master を使用しています。ここでは、ファイルを読み取った後のデフォルトの列名は、0、1、2、.. ではありません。df.icol() を使用して、位置で列を選択できることに注意してください。このように、列名が設定されている場合、またはデフォルトの列名が使用されている場合、依存関係はありません。

In [93]: data = """\
1,2,3
4,5,6
"""

In [94]: df = pd.read_csv(StringIO(data), header=None)

In [95]: df
Out[95]:
   X0  X1  X2
0   1   2   3
1   4   5   6

In [96]: df.icol(0)
Out[96]:
0    1
1    4
Name: X0
于 2012-10-05T14:08:53.253 に答える
2

一連のスカラー値を文字列と比較しているようです:

In [73]: node = 'a'

In [74]: deco = 'b'

In [75]: data = [(10, 'a', 1), (11, 'b', 2), (12, 'c', 3)]

In [76]: df = pd.DataFrame(data)

In [77]: df
Out[77]: 
    0  1  2
0  10  a  1
1  11  b  2
2  12  c  3

In [78]: cond = ((df[1] != node) & (df[2] != deco))
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-78-0afad3702859> in <module>()
----> 1 cond = ((df[1] != node) & (df[2] != deco))

/home/.../python2.7/site-packages/pandas/core/series.pyc in wrapper(self, other)
    140             if np.isscalar(res):
    141                 raise TypeError('Could not compare %s type with Series'
--> 142                                 % type(other))
    143             return Series(na_op(values, other),
    144                           index=self.index, name=self.name)

TypeError: Could not compare <type 'str'> type with Series

pandas は一連の文字列と数値を処理できますが、文字列と数値を比較するのはあまり意味がないので、エラー メッセージは役に立ちます。ただし、パンダはおそらくより詳細なエラーメッセージを表示する必要があります。

列 2 の条件が数値の場合は、次のように機能します。

In [79]: deco = 3

In [80]: cond = ((df[1] != node) & (df[2] != deco))

In [81]: df[cond]
Out[81]: 
    0  1  2
1  11  b  2

いくつかのコメント:

混乱の一部は、パンダの設計上の決定によるものかもしれません。

ファイルからデータを読み取る場合read_csv、結果のデータ フレームのデフォルトの列名がX.1to X.N(バージョン >= 0.9 の場合は to) に設定されます。これは文字列です X1XN

既存の配列やリストなどからデータ フレームを作成する場合、列名はデフォルトで整数0になります。N

In [23]: df = pd.read_csv(StringIO(data), header=None)

In [24]: df.columns
Out[24]: Index([X.1, X.2, X.3], dtype=object)

In [25]: df.columns[0]
Out[25]: 'X.1'

In [26]: type(df.columns[0])
Out[26]: str

In [27]: df = pd.DataFrame(randn(2,3))

In [30]: df.columns
Out[30]: Int64Index([0, 1, 2])

In [31]: df.columns[0]
Out[31]: 0

In [32]: type(df.columns[0])
Out[32]: numpy.int64

これについて話し合うためにチケットを開きました。

だからあなたの

In [60]: cond = ((df[1] != node) & (df[2] != deco))

と の型がとの型df[1]df[2]同じ場合、配列などから作成されたデータフレームで機能するはずです。nodedeco

read_csvよりも ファイルを読み取った場合

In [60]: cond = ((df['X.2'] != node) & (df['X.3'] != deco))

バージョン < 0.9 で動作するはずですが、

In [60]: cond = ((df['X2'] != node) & (df['X3'] != deco))

バージョン>= 0.9。

于 2012-10-07T13:04:14.360 に答える