这种.loc语法是我通常在某些行上设置值的方式,但在本例中,它返回这个错误: ValueError: Cannot convert non-finite Values (NA or inf) to integer。.notnull像预期的那样工作,我不明白为什么它甚至涉及到M是np.nan的行。
预期输出:将M非空行中的MN值更改为01.01.2019
import pandas as pd
import numpy as np
example = {'M': [2020,2020,2020,np.nan],
'MN': [np.nan,np.nan,np.nan,np.nan]
}
df = pd.DataFrame(example, columns = ['M', 'MN'])
print(df.loc[df['M'].notnull()])
df.loc[df['M'].notnull(),'MN'] = pd.to_datetime('01.01.' +(df['M'].astype('int32') -1).astype(str),format='%d.%m.%Y')
print(df)
它不应该只使用M不是np.nan的所有行吗?这种语法不是“照本宣科”吗?我应该用什么来代替呢?
发布于 2020-11-02 02:04:27
Hmm..im不知道为什么,但这里有一个变通办法
df.loc[df['M'].notnull(), 'MN'] = pd.to_datetime('01.01.'+(df['M'].dropna().astype(int)-1).astype(str), format='%d.%m.%Y')
M MN
0 2020.0 2019-01-01 00:00:00
1 2020.0 2019-01-01 00:00:00
2 2020.0 2019-01-01 00:00:00
3 NaN NaN
一种猜测是,当调用pd.to_datetime
pandas从原始df而不是切片df中提取数据时。
在其他工作中,pandas计算操作,然后根据loc进行切片。这种解释是有意义的,因为df.loc[df['M'].notnull(), 'MN'] = df['M']
的工作方式与预期一致
https://stackoverflow.com/questions/64634719
复制相似问题