给定一个pandas数据帧,其中包含(可能)NaN值分散在这里和那里:
问题:如何确定哪些列包含NaN值?特别是,我可以获得包含NaN的列名列表吗?
谢谢
我绘制一条线而没有指定颜色(想想:plt.plot(x,y)).说颜色是蓝色的.
问题:如何从plt对象获取此颜色,以便将其放入变量中?
似乎这很接近(可能是解决方案):
p = plt.plot(x,y)
color = p[0].get_color()
Run Code Online (Sandbox Code Playgroud)
更新的问题: 我不确定我理解"0"索引:p [0]是否总是访问最近的绘制线?
给出了1.5 Gb的pandas数据帧列表.
我想知道哪个是更好的方法来处理加载这些数据:pickle(通过cPickle),hdf5,或python中的其他东西?
首先,"倾销"数据可以花很长时间,我只做一次.
我也不关心磁盘上的文件大小.
问: 我关心的是尽快将数据加载到内存中的速度.
我有一个函数,可以接受列表或numpy数组.
在任何一种情况下,列表/数组都有一个元素(总是).我只需要返回一个浮点数.
所以,例如,我可以收到:
list_ = [4]
Run Code Online (Sandbox Code Playgroud)
或numpy数组:
array_ = array([4])
Run Code Online (Sandbox Code Playgroud)
我应该回来
4.0
Run Code Online (Sandbox Code Playgroud)
所以,自然(我会说),我在list_上使用float(...)并得到:
TypeError: float() argument must be a string or a number
Run Code Online (Sandbox Code Playgroud)
我对array_做同样的事情,这次它通过响应"4.0"来工作.由此,我了解到Python的列表无法以这种方式转换为float.
基于numpy数组转换为float的成功,这引出了我的方法:
float(np.asarray(list_))
Run Code Online (Sandbox Code Playgroud)
当list_既是Python列表又是numpy数组时,这种方法也适用.
题
但似乎这种方法有一个开销,首先将列表转换为numpy数组然后浮动.基本上:有更好的方法吗?
我正在使用Python的Spyder编辑器.我需要更改缩进设置(例如,让"tab"表示"4个空格").
我该如何做到这一点?
我正在用Python编写列表理解:
[2 * x if x > 2 else add_nothing_to_list for x in some_list]
Run Code Online (Sandbox Code Playgroud)
我需要"add_nothing_to_list"部分(逻辑的else部分)实际上什么都不是.
Python有办法做到这一点吗?特别是,有没有办法说a.append(nothing)
哪个会a
保持不变.这可以是编写通用代码的有用功能.
我一直在寻找一种比较Python中两个数字的通用方法.特别是,我想弄清楚它们是否相同.
Python中的数字类型是:
int, long, float & complex
Run Code Online (Sandbox Code Playgroud)
例如,我可以简单地说:2比较2个整数(一种数字):
a == b
Run Code Online (Sandbox Code Playgroud)
对于浮子,由于舍入精度,我们必须更加小心,但我可以在一定容差范围内对它们进行比较.
题
我们得到2个一般数字a
和b
:我们如何比较它们?我正在考虑将两者都转换为复数(如果类型是,那么它将具有0个虚部int
)并在该域中进行比较?
这个问题比直接比较浮点数更普遍.当然,它与这个问题有关,但它不一样.
在 Python 2 中,我可以通过pip
优先使用二进制包而不是源包来安装一组包(意思是:如果没有找到二进制则回退到源代码):
(1) pip install --prefer-binary -r requirements.txt
在 Python 3 中,我可以这样做:
(2) pip3 install --only-binary=:all: -r requirements.txt
但是(1)并不完全等于(2),因为前者说:
安装时首选二进制文件;但如果我找不到二进制选项,那么我会使用源代码。
后者说:
如果找不到二进制文件,我将失败;甚至不要从源头上尝试。
因此,从文档看来,一种解决方案可能是手动输入应考虑进行源安装的每个包 - 意思是:可以在命令行上多次提供“仅二进制”标志,因此可以处理特殊的 -像这样的情况(通过清空它,或为二进制包提供特定的包名)。这个答案在某种程度上详细说明了这种方法:Make pip download prefer to download source-distributions (not wheel)。
但是,我有大量的两种类型的包,所以我需要一种像 (1) 方法这样的自动化方式。
问题:如何在 Python/pip 3 中获得与 (1) 类似的自动化行为?
解决方案:Pip 不是 Python - 将 pip 升级到 20.X 并使用--prefer-binary
.
更新:要比较“关闭”而不是“相等”,请在对“assert_frame_equal”的调用中使用“check_exact=False”,详情如下:https ://pandas.pydata.org/pandas-docs/stable/generated/pandas.testing .assert_frame_equal.html。
原始问题: Pandas 数据框包含N列浮点数。
我想检查每对可能的列中的元素是否相等(因此检查 i 列中的所有元素是否与 j 列中的所有元素在某个容差范围内接近)。
我可以迭代和使用np.allclose(...)
,但我想知道在 Pandas 中是否有更好的(阅读:内置)方式来做到这一点,理想情况下我可以使用列标签?
我在想:df.allclose(['a', 'b', 'c'])
某种东西......
如何以最快的方式减去2个忽略索引的数据帧.
例如,我想减去:
d1=
x1
0 -3.141593
0 -3.141593
0 -3.141593
1 -2.443461
1 -2.443461
Run Code Online (Sandbox Code Playgroud)
从
d2 =
x2
1 -2.443461
2 -1.745329
3 -1.047198
4 -0.349066
2 0.349066
Run Code Online (Sandbox Code Playgroud)
我尝试过的:
我可以这样做,例如:
dsub = d1.reset_index(drop=True) - d2.reset_index(drop=True)
Run Code Online (Sandbox Code Playgroud)
但是,我想以最有效的方式进行减法.我一直在寻找答案,但我只看到了不考虑速度的解决方案.
我该如何做到这一点?
编辑根据一些答案,这里有一些时间在我的机器上运行:
对于较小的数据帧:
方法1(a和b):
a: d1.reset_index(drop=True) - d2.reset_index(drop=True)
b: d1.reset_index(drop=True).sub(d2.reset_index(drop=True))
~1024.91 usec/pass
Run Code Online (Sandbox Code Playgroud)
方法2:
d1 - d2.values
~784.79 usec/pass
Run Code Online (Sandbox Code Playgroud)
方法3:
pd.DataFrame(d1.values - d2.values, d1.index, ['x1-x2'])
~653.82 usec/pass
Run Code Online (Sandbox Code Playgroud)
对于非常大的数据帧,请参阅下面的@ MaxU答案.
python ×10
dataframe ×4
numpy ×4
pandas ×4
list ×2
arrays ×1
hdf5 ×1
indentation ×1
int ×1
matplotlib ×1
nan ×1
numerics ×1
performance ×1
pip ×1
python-3.x ×1
spyder ×1