gpt4 book ai didi

python - Pandas : default columns names

转载 作者:太空宇宙 更新时间:2023-11-03 15:22:35 26 4
gpt4 key购买 nike

如果读取一个带有默认列名的文件,之后如何调用它们?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

按默认名称处理数据框列更适合我的应用程序。

最佳答案

您似乎将一系列标量值与字符串进行比较:

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 可以处理系列中的字符串和数字,但比较字符串和数字并没有多大意义,因此错误消息很有用。但是 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

一些评论:

也许你的一些困惑是由于 pandas 的设计决定:

如果您使用 read_csv 从文件中读取数据,结果数据框的默认列名称将设置为 X.1X.N (对于 X1XN 版本 >= 0.9),它们是字符串。

如果您从现有数组或列表或其他内容创建数据框,列名默认为 0N 并且是整数。

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

我打开了一个ticket讨论这个。

所以你的

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。

关于python - Pandas : default columns names,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12747417/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com