小编Tom*_*Tom的帖子

熊猫重新采样开始日期

我想使用特定日期(或月份)作为第一个 bin 的边缘对 Pandas 对象重新采样。例如,在下面的代码片段中,我希望我的第一个索引值是2020-02-29,我很乐意指定start=2or start="2020-02-29"

>>> dates = pd.date_range("2020-01-29", "2021-07-04")
>>> s = pd.Series(range(len(dates)), index=dates)
>>> s.resample('4M').count()
2020-01-31      3
2020-05-31    121
2020-09-30    122
2021-01-31    123
2021-05-31    120
2021-09-30     34
Freq: 4M, dtype: int64
Run Code Online (Sandbox Code Playgroud)

到目前为止,这是我能想到的最干净的用途,pd.cut并且groupby

>>> rule = "4M"
>>> start = pd.Timestamp("2020-02-29") - pd.tseries.frequencies.to_offset(rule)
>>> end = s.index.max() + pd.tseries.frequencies.to_offset(rule)
>>> bins = pd.date_range(start, end, freq=rule)
>>> gb = s.groupby(pd.cut(s.index, bins)).count()
>>> gb.index = gb.index.categories.right
>>> gb
2020-02-29     32
2020-06-30 …
Run Code Online (Sandbox Code Playgroud)

python time-series dataframe pandas pandas-resample

20
推荐指数
2
解决办法
2012
查看次数

在不填充缺失时间的情况下重新采样 Pandas 数据框

对数据帧进行重新采样可以使数据帧达到更高或更低的时间分辨率。大多数时候,这用于降低分辨率(例如,将 1 分钟数据重新采样为每月值)。当数据集稀疏时(例如,2020 年 2 月没有收集任何数据),2020 年 2 月的行将填充重采样数据帧的 NaN。问题是,当数据记录很长且稀疏时,会有大量 NaN 行,这使得数据帧不必要地变大并占用大量 CPU 时间。例如,考虑这个数据帧和重新采样操作:

import numpy as np
import pandas as pd

freq1 = pd.date_range("20000101", periods=10, freq="S")
freq2 = pd.date_range("20200101", periods=10, freq="S")

index = np.hstack([freq1.values, freq2.values])
data = np.random.randint(0, 100, (20, 10))
cols = list("ABCDEFGHIJ")

df = pd.DataFrame(index=index, data=data, columns=cols)

# now resample to daily average
df = df.resample(rule="1D").mean()
Run Code Online (Sandbox Code Playgroud)

该数据框中的大部分数据都是无用的,可以通过以下方式删除:

df.dropna(how="all", axis=0, inplace=True)
Run Code Online (Sandbox Code Playgroud)

然而,这是草率的。是否有另一种方法来重新采样数据帧,该方法不会用 NaN 填充所有数据间隙(即在上面的示例中,生成的数据帧将只有两行)?

python dataframe pandas pandas-resample

9
推荐指数
1
解决办法
4433
查看次数

使用 PyInstaller 检查时出现问题;可以获取类的来源,但不能获取函数的来源

我的第一篇文章在这里,请耐心等待......

我正在使用 PyInstaller 捆绑 tkinter 应用程序,并且在使用该inspect库时遇到了问题。基本上,我可以调用我编写的类的源代码,但不能调用函数。我做了这个人为的案例来证明:

我有一个像这样的文件夹结构:

experiment/
---experiment.py
---init.py
---resources/
    /---resources.py
    /---init.py
---loader/
    /---loader.py
    /---init.py
Run Code Online (Sandbox Code Playgroud)

resources.py定义一个函数一个类:

def foo(a):
    print(str(a) + ' is what you entered.')

class Bar:
    def __init__(self, b):
        self.b = b
Run Code Online (Sandbox Code Playgroud)

loader.py导入该函数和该类并定义一个函数来打印它们的源代码:

import inspect

from resources import resources

def testfunc():
    source_Bar = inspect.getsource(resources.Bar)
    print(source_Bar)

    source_foo = inspect.getsource(resources.foo)
    print(source_foo)    
Run Code Online (Sandbox Code Playgroud)

experiment.py从中加载打印函数loader.py并调用它:

from loader.loader import testfunc

testfunc()
Run Code Online (Sandbox Code Playgroud)

我可以experiment.py在 Python 控制台中运行并获得预期的输出(foo和的源代码Bar)。

然后,我使用 PyInstaller 创建可执行文件experiment.py(从仅添加 PyInstaller …

python pyinstaller inspect

6
推荐指数
1
解决办法
1483
查看次数

如何将带有日期时间的 DataFrames 从 Stack Overflow 复制到 Python 中?

我经常看到pandas关于 SO 使用时间戳中包含空格的时间序列的示例:

                     A
2020-01-01 09:20:00  0
2020-01-01 09:21:00  1
2020-01-01 09:22:00  2
2020-01-01 09:23:00  3
2020-01-01 09:24:00  4
Run Code Online (Sandbox Code Playgroud)

或者这是时间不是索引的一部分:

                dates    values cat
0 2020-01-01 09:20:00  0.758513   a
1 2020-01-01 09:21:00  0.337325   b
2 2020-01-01 09:22:00  0.618372   b
3 2020-01-01 09:23:00  0.878714   b
4 2020-01-01 09:24:00  0.311069   b
Run Code Online (Sandbox Code Playgroud)

有没有一种好方法可以将这些(或类似的)数据复制回 Python 以进行处理? 我发现像帖子这个这个这是为获得很多例子了SO的救星,但我通常无法找到复制/粘贴的方法(使用pd.read_clipboard()pd.read_table()),对这些数据的作品。这通常会阻止我尝试回答1

上面的例子是这样创建的:

#one
import pandas as pd
import numpy

dr = pd.date_range('01-01-2020 9:20', …
Run Code Online (Sandbox Code Playgroud)

python clipboard copy-paste time-series pandas

6
推荐指数
1
解决办法
133
查看次数

为什么熊猫使用 numpy 中的“NaN”,而不是它自己的空值?

这是一个比较宽泛的话题,但我将尝试将其缩减为一些具体问题。

在开始回答关于 SO 的问题时,我发现自己在制作玩具数据时有时会遇到这样的愚蠢错误:

In[0]:

import pandas as pd

df = pd.DataFrame({"values":[1,2,3,4,5,6,7,8,9]})
df[df < 5] = np.nan

Out[0]:
NameError: name 'np' is not defined
Run Code Online (Sandbox Code Playgroud)

我很用来自动导入numpy使用pandas,这并不通常发生在实际的代码。但是,它确实让我想知道为什么pandas没有自己的值/对象来表示空值。

我最近才意识到你可以使用 PythonNone代替类似的情况:

import pandas as pd

df = pd.DataFrame({"values":[1,2,3,4,5,6,7,8,9]})
df[df < 5] = None
Run Code Online (Sandbox Code Playgroud)

它按预期工作并且不会产生错误。但是我觉得我看到的 SO 的约定是使用np.nan,人们np.nan在讨论空值时通常会提到这个约定(这也许是我没有意识到None可以使用的原因,但也许那是我自己的特质) .

简要地研究一下,我现在看到它自 1.0.0 以来pandas 确实具有pandas.NA价值,但我从未见过有人在帖子中使用它

In[0]:

import pandas as pd
import numpy as np

df = pd.DataFrame({'values':np.random.rand(20,)})
df['above'] …
Run Code Online (Sandbox Code Playgroud)

python null numpy missing-data pandas

5
推荐指数
1
解决办法
926
查看次数

Python 对象的属性是否有一个名称以使其具有与其代码等效的控制台表示?

这是一个比较宽泛的话题,但我将尝试将其缩减为一些具体问题。

我在想Python 中的某个~meta~属性,其中许多基本数据类型的控制台表示等效于用于构造这些对象的代码:

l = [1,2,3]
d = {'a':1,'b':2,'c':3}
s = {1,2,3}
t = (1,2,3)
g = "123"

###

>>> l
[1, 2, 3]
>>> d
{'a': 1, 'b': 2, 'c': 3}
>>> s
{1, 2, 3}
>>> t
(1, 2, 3)
>>> g
'123'
Run Code Online (Sandbox Code Playgroud)

因此,对于这些对象中的任何一个,我都可以将控制台输出复制到代码中以创建这些结构或将它们分配给变量。

这不适用于某些对象,例如函数:

def foo():
    pass

f = foo
L = [1,2,3, foo]

###

>>> f
<function foo at 0x00000235950347B8>
>>> L
[1, 2, 3, <function foo at 0x00000235950347B8>]
Run Code Online (Sandbox Code Playgroud)

虽然l上面的列表有这个属性,但L这里的列表没有;但这似乎只有 …

python console representation pandas

5
推荐指数
1
解决办法
59
查看次数

连接图的一组边中的最小边

以下是我的图论与算法课程中的一个例子:

A为带权无向图(不同权重)的边的最小子集G,这样,如果我们A从中删除GG则变得断开连接。中最亮的边A必须位于任何 MST 中。

为什么这是一个正确的事实?我无法理解。

algorithm graph shortest-path minimum-spanning-tree data-structures

1
推荐指数
1
解决办法
652
查看次数