小编use*_*645的帖子

如何在前瞻性的基础上使用Pandas rolling_*函数

假设我有一个时间序列:

In[138] rng = pd.date_range('1/10/2011', periods=10, freq='D')
In[139] ts = pd.Series(randn(len(rng)), index=rng)
In[140]
Out[140]:
2011-01-10    0
2011-01-11    1
2011-01-12    2
2011-01-13    3
2011-01-14    4
2011-01-15    5
2011-01-16    6
2011-01-17    7
2011-01-18    8
2011-01-19    9
Freq: D, dtype: int64
Run Code Online (Sandbox Code Playgroud)

如果我使用其中一个rolling_*函数,例如rolling_sum,我可以获得我想要的向后看滚动计算的行为:

In [157]: pd.rolling_sum(ts, window=3, min_periods=0)
Out[157]: 
2011-01-10     0
2011-01-11     1
2011-01-12     3
2011-01-13     6
2011-01-14     9
2011-01-15    12
2011-01-16    15
2011-01-17    18
2011-01-18    21
2011-01-19    24
Freq: D, dtype: float64
Run Code Online (Sandbox Code Playgroud)

但是,如果我想做一个前瞻性的总和怎么办?我尝试过这样的事情:

In [161]: pd.rolling_sum(ts.shift(-2, freq='D'), window=3, min_periods=0)
Out[161]: 
2011-01-08     0
2011-01-09 …
Run Code Online (Sandbox Code Playgroud)

python pandas

12
推荐指数
3
解决办法
1万
查看次数

有什么方法可以在将pandas系列从str转换为float时跳过不可转换的行?

我有一个从csv文件创建的pandas数据框.此数据框的一列包含最初强制转换为字符串的数字数据.大多数条目都是类似数字的,但有些条目包含非数字的各种错误代码.我事先不知道所有的错误代码是什么或有多少.因此,例如,数据框可能如下所示:

[In 1]: df
[Out 1]:
            data     OtherAttr
MyIndex
0           1.4        aaa
1           error1     foo
2           2.2        bar
3           0.8        bar
4           xxx        bbb
...
743733      BadData    ccc
743734      7.1        foo
Run Code Online (Sandbox Code Playgroud)

我想将df.data其转换为浮点数并抛弃任何无法正确转换的值.这是否有内置功能?就像是:

df.data = df.data.astype(float, skipbad = True)
Run Code Online (Sandbox Code Playgroud)

(虽然我知道具体不起作用,但我没有看到任何形式的kwargs做我想做的事)

我想我可以编写一个函数try然后使用pandas apply或者map,但这似乎是一个不优雅的解决方案.这一定是一个相当普遍的问题,对吧?

python pandas

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

如何在pandas中使用argmin和groupby

假设我有一个像这样的pandas数据帧:

  cat  val
0   a    1
1   a    6
2   a   12
3   b    2
4   b    5
5   b   11
6   c    4
7   c   22
Run Code Online (Sandbox Code Playgroud)

我想知道,对于每个类别('cat'的每个值),值最接近给定值的位置是什么,比如说5.5.我可以减去我的目标值并取绝对值,给我这样的东西:

  cat  val  val_delt
0   a    1       4.5
1   a    6       0.5
2   a   12       6.5
3   b    2       3.5
4   b    5       0.5
5   b   11       5.5
6   c    4       1.5
7   c   22      16.5
Run Code Online (Sandbox Code Playgroud)

但是我不知道下一步要去哪里.我的第一个想法是使用argmin()和groupby(),但这给出了一个错误:

In [375]: df.groupby('cat').val_delt.argmin()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-375-a2c3dbc43c50> in <module>()
----> 1 df.groupby('cat').val_delt.argmin() …
Run Code Online (Sandbox Code Playgroud)

python pandas

7
推荐指数
3
解决办法
2543
查看次数

如何在提取单行时保留pandas数据帧标识

我使用.xs或.loc(它们似乎表现相同)通过索引提取我的数据帧的子集.当我的条件检索多行时,结果将保留一个数据帧.当只检索到一行时,它会自动转换为一个系列.我不希望这种行为,因为这意味着我需要处理下游的多个案例(可用于系列和数据帧的不同方法集).

In [1]: df = pd.DataFrame({'a':range(7), 'b':['one']*4 + ['two'] + ['three']*2,
 'c':range(10,17)})

In [2]: df.set_index('b', inplace=True)

In [3]: df.xs('one')
Out[3]:
     a   c
b
one  0  10
one  1  11
one  2  12
one  3  13

In [4]: df.xs('two')
Out[4]:
a     4
c    14
Name: two, dtype: int64

In  [5]: type(df.xs('two'))
Out [5]: pandas.core.series.Series
Run Code Online (Sandbox Code Playgroud)

我可以手动将该系列转换回数据帧,但它看起来很麻烦,还需要进行案例测试,看看我是否应该这样做.是否有一种更简洁的方法可以让数据帧重新开始?

python pandas

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

标签 统计

pandas ×4

python ×4