根据熊猫中的日期条件用NaN替换一列的值

问题描述 投票:0回答:2

我尝试根据以下条件替换/更新price列的值:如果date等于2019-09-01,然后用np.nan替换或更新它们,我使用两种方法,但到目前为止尚未解决:

         price     pct      date
0  10379.00000  0.0242  2019/6/1
1  10608.25214     NaN  2019/9/1
2  10400.00000  0.0658  2019/6/1
3  10258.48471     NaN  2019/9/1
4  12294.00000  0.1633  2019/6/1
5  11635.07402     NaN  2019/9/1
6  12564.00000 -0.0066  2019/6/1
7  13615.10992     NaN  2019/9/1

解决方案1:df.price.where(df.date == '2019-09-01', np.nan, inplace=True),但是它用price替换了所有NaN的值

   price     pct        date
0    NaN  0.0242  2019-06-01
1    NaN     NaN  2019-09-01
2    NaN  0.0658  2019-06-01
3    NaN     NaN  2019-09-01
4    NaN  0.1633  2019-06-01
5    NaN     NaN  2019-09-01
6    NaN -0.0066  2019-06-01
7    NaN     NaN  2019-09-01

解决方案2:df.loc[df.date == '2019-09-01', 'price'] = np.nan,这不能替代值。

         price     pct        date
0  10379.00000  0.0242  2019-06-01
1  10608.25214     NaN  2019-09-01
2  10400.00000  0.0658  2019-06-01
3  10258.48471     NaN  2019-09-01
4  12294.00000  0.1633  2019-06-01
5  11635.07402     NaN  2019-09-01
6  12564.00000 -0.0066  2019-06-01
7  13615.10992     NaN  2019-09-01

请注意在dateread_excel格式之前excel文件中的2019/9/1,我已经用df['date'] = pd.to_datetime(df['date']).dt.date进行了转换。

有人为什么这行不通?谢谢。

python pandas dataframe
2个回答
1
投票

['2019-06-01'是字符串,df.datedatetime

您应该将df.date转换为str以匹配

df.loc[df.date.astype(str) == '2019-06-01', 'price'] = np.nan

0
投票

实际上第一个解决方案对我有用(有点),请尝试以下操作:

import pandas as pd
import numpy as np
df = pd.DataFrame(
    np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [3, 2, 1], [5, 6, 7]]), 
    columns=['a', 'b', 'c']
)

df应该是:

   a  b  c
0  1  2  3
1  4  5  6
2  7  8  9
3  3  2  1
4  5  6  7

然后使用类似的代码:

df.a.where(df.c != 7, np.nan, inplace=True)

我得到df为:

     a  b  c
0  1.0  2  3
1  4.0  5  6
2  7.0  8  9
3  3.0  2  1
4  NaN  6  7
© www.soinside.com 2019 - 2024. All rights reserved.