相关疑难解决方法(0)

在此数据框中填充缺失值的最有效方法是什么?

我有以下熊猫数据框:

df = pd.DataFrame([
    ['A', 2017, 1],
    ['A', 2019, 1],
    ['B', 2017, 1],
    ['B', 2018, 1],
    ['C', 2016, 1],
    ['C', 2019, 1],
], columns=['ID', 'year', 'number'])
Run Code Online (Sandbox Code Playgroud)

并且正在寻找最有效的方法来填充缺失的年份,该列的默认值为 0 number

预期的输出是:

  ID  year  number
0  A  2017       1
1  A  2018       0
2  A  2019       1
3  B  2017       1
4  B  2018       1
5  C  2016       1
6  C  2017       0
7  C  2018       0
8  C  2019       1
Run Code Online (Sandbox Code Playgroud)

我拥有的数据框相对较大,因此我正在寻找一种有效的解决方案。

编辑:

这是我到目前为止的代码:

min_max_dict = df[['ID', 'year']].groupby('ID').agg([min, max]).to_dict('index')

new_ix = [[], …
Run Code Online (Sandbox Code Playgroud)

python pandas

23
推荐指数
4
解决办法
1281
查看次数

熊猫填补组内缺少的日期和值

我的数据框如下所示

x = pd.DataFrame({'user': ['a','a','b','b'], 'dt': ['2016-01-01','2016-01-02', '2016-01-05','2016-01-06'], 'val': [1,33,2,1]})
Run Code Online (Sandbox Code Playgroud)

我希望能够做的就是找到日期列内的最小和最大的日期,并扩大该列有所有的日期出现,同时填补0val列.所以期望的输出是

            dt user  val
0   2016-01-01    a    1
1   2016-01-02    a   33
2   2016-01-03    a    0
3   2016-01-04    a    0
4   2016-01-05    a    0
5   2016-01-06    a    0
6   2016-01-01    b    0
7   2016-01-02    b    0
8   2016-01-03    b    0
9   2016-01-04    b    0
10  2016-01-05    b    2
11  2016-01-06    b    1
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这里这里提到的解决方案,但它们不是我追求的.任何指针都非常赞赏.

python dataframe pandas

18
推荐指数
2
解决办法
8965
查看次数

pandas.DatetimeIndex频率为None,无法设置

我从"日期"列创建了一个DatetimeIndex:

sales.index = pd.DatetimeIndex(sales["date"])
Run Code Online (Sandbox Code Playgroud)

现在索引如下:

DatetimeIndex(['2003-01-02', '2003-01-03', '2003-01-04', '2003-01-06',
                   '2003-01-07', '2003-01-08', '2003-01-09', '2003-01-10',
                   '2003-01-11', '2003-01-13',
                   ...
                   '2016-07-22', '2016-07-23', '2016-07-24', '2016-07-25',
                   '2016-07-26', '2016-07-27', '2016-07-28', '2016-07-29',
                   '2016-07-30', '2016-07-31'],
                  dtype='datetime64[ns]', name='date', length=4393, freq=None)
Run Code Online (Sandbox Code Playgroud)

如您所见,freq属性为None.我怀疑路上的错误是由失踪引起的freq.但是,如果我尝试明确设置频率:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-148-30857144de81> in <module>()
      1 #### DEBUG
----> 2 sales_train = disentangle(df_train)
      3 sales_holdout = disentangle(df_holdout)
      4 result = sarima_fit_predict(sales_train.loc[5002, 9990]["amount_sold"], sales_holdout.loc[5002, 9990]["amount_sold"])

<ipython-input-147-08b4c4ecdea3> in disentangle(df_train)
      2     # transform sales table to disentangle sales time series
      3     sales = …
Run Code Online (Sandbox Code Playgroud)

python indexing time-series pandas

14
推荐指数
3
解决办法
7780
查看次数

大熊猫填写时间序列中缺少的日期

我有一个数据框,它汇总了几天的数据.我想补充一下缺少的日子

我正在关注另一篇文章,将失踪日期添加到pandas数据框中,不幸的是,它覆盖了我的结果(可能功能稍有改变?)...代码如下

import random
import datetime as dt
import numpy as np
import pandas as pd

def generate_row(year, month, day):
    while True:
        date = dt.datetime(year=year, month=month, day=day)
        data = np.random.random(size=4)
        yield [date] + list(data)

# days I have data for
dates = [(2000, 1, 1), (2000, 1, 2), (2000, 2, 4)]
generators = [generate_row(*date) for date in dates]

# get 5 data points for each
data = [next(generator) for generator in generators for _ in range(5)]

df = …
Run Code Online (Sandbox Code Playgroud)

python pandas

7
推荐指数
2
解决办法
2万
查看次数

如何不绘制缺失的经期

我正在尝试绘制时间序列数据,其中在某些时期没有数据。数据被加载到数据框中,我使用 绘制它df.plot()。问题在于,绘制时缺失的时期会被连接起来,给人一种该时期存在价值的印象,但实际上并不存在。

这是问题的一个例子

问题

9 月 1 日至 9 月 8 日以及 9 月 9 日至 9 月 25 日期间没有数据,但绘制数据的方式看起来似乎该时期有值。

我希望在该时期内显示零值,或者根本没有值。怎么做?

需要明确的是,我没有 [Sep 01、Sep 08]、[Sep 09、Sep 29] 期间的 NaN 值,但根本没有数据(甚至在时间索引中也没有)。

python plot time-series nan pandas

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

熊猫重新索引MultiIndex数据框

有没有一种方法可以对两个(不同级别的)数据框重新编制索引,以使它们在所有级别上共享相同的索引?

演示:

创建一个名为“ A”的基本数据框:

index = np.array(['AUD','BRL','CAD','EUR','INR'])
data = np.random.randint(1, 20, (5,5))
A = pd.DataFrame(data=data, index=index, columns=index)  
Run Code Online (Sandbox Code Playgroud)

创建一个名为“ B”的MultiIndex Dataframe:

np.random.seed(42)
midx1 = pd.MultiIndex.from_product([['Bank_1', 'Bank_2'], 
['AUD','CAD','EUR']], names=['Bank', 'Curency'])
B = pd.DataFrame(np.random.randint(10,25,6), midx1)
B.columns = ['Notional']
Run Code Online (Sandbox Code Playgroud)

基本DF:

>>> Dataframe A:

        AUD     BRL     CAD     EUR     INR
AUD     7       19      11      11      4
BRL     8       3       2       12      6
CAD     2       1       12      12      17
EUR     10      16      15      15      19
INR     12      3       5       19      7
Run Code Online (Sandbox Code Playgroud)

MultiIndex DF:

>>> Dataframe B:

                    Notional …
Run Code Online (Sandbox Code Playgroud)

multi-index dataframe pandas

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

在多索引数据框中添加缺失日期索引

我正在使用一个多索引数据框,该数据框以日期列和 location_id 作为索引。

index_1 = ['2020-01-01', '2020-01-03', '2020-01-04']
index_2 = [100,200,300]

index = pd.MultiIndex.from_product([index_1, 
index_2], names=['Date', 'location_id'])

df = pd.DataFrame(np.random.randint(10,100,9), index)
df

                         0
Date       location_id    
2020-01-01 100          19
           200          75
           300          39
2020-01-03 100          11
           200          91
           300          80
2020-01-04 100          36
           200          56
           300          54
Run Code Online (Sandbox Code Playgroud)

我想填写缺失的日期,只用一个 location_id 并用 0 填充:

                         0
Date       location_id    
2020-01-01 100          19
           200          75
           300          39
2020-01-02 100          0
2020-01-03 100          11
           200          91
           300          80
2020-01-04 100          36
           200          56
           300          54
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?这很有帮助 …

python dataframe pandas

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

重新索引以将缺失的日期添加到 Pandas 数据框

我尝试解析一个如下所示的 CSV 文件:

dd.mm.yyyy   value

01.01.2000   1
02.01.2000   2
01.02.2000   3
Run Code Online (Sandbox Code Playgroud)

我需要添加缺失的日期并用NaN根据值填充。我Series.reindex这个问题中使用过

import pandas as pd

ts=pd.read_csv(file, sep=';', parse_dates='True', index_col=0)

idx = pd.date_range('01.01.2000', '02.01.2000')

ts.index = pd.DatetimeIndex(ts.index)
ts = ts.reindex(idx, fill_value='NaN')
Run Code Online (Sandbox Code Playgroud)

但结果是,由于日期格式(即 mm/dd 而不是 dd/mm),某些日期的值会被交换:

01.01.2000   1
02.01.2000   3
03.01.2000   NaN
...
...
31.01.2000   NaN
01.02.2000   2
Run Code Online (Sandbox Code Playgroud)

我尝试了几种方法(即添加dayfirst=Trueread_csv)来做对,但仍然无法弄清楚。请帮忙。

python date pandas

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

标签 统计

pandas ×8

python ×7

dataframe ×3

time-series ×2

date ×1

indexing ×1

multi-index ×1

nan ×1

plot ×1