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

时间:2019-11-06 03:46:34

标签: python pandas dataframe

我尝试根据以下条件替换/更新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

有人为什么不起作用?谢谢。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分: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