我尝试根据以下条件替换/更新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
请注意,date
为read_excel
格式之前,请先在Excel文件中注意2019/9/1
,我已将其转换为df['date'] = pd.to_datetime(df['date']).dt.date
。
有人为什么不起作用?谢谢。
答案 0 :(得分:1)
'2019-06-01'
是字符串,df.date
是datetime
您应将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