我无法弄清楚为什么在将数据帧列指定为最初没有任何空值的系列之后会弹出新的空值。这是一个例子:
df.date_col.shape
返回(100000,)
df.date_col.isnull().sum()
返回0
然后我创建了一个相同大小的新系列:
new_series = pd.Series([int(d[:4]) for d in df.date_col])
new_series.shape
返回(100000,)
new_series.isnull().sum()
返回0
但是如果我尝试将这个新系列分配到原始列:
df.date_col = new_series
df.date_col.isnull().sum()
返回6328
有人请告诉我这里可能会发生什么吗?
答案 0 :(得分:1)
IIUC,您的索引不会继续,当您创建pd.Series
时,它会自动将索引从0分配到len(s)-1,数据帧分配是基于索引,索引未命中匹配将创建NaN
df=pd.DataFrame({'col':[1,2,3]},index=[1,2,3])
s=pd.Series([d*2 for d in df.col])
df['New']=s
df
Out[170]:
col New
1 1 4.0
2 2 6.0
3 3 NaN
df['New2']=s.values
df
Out[172]:
col New New2
1 1 4.0 2
2 2 6.0 4
3 3 NaN 6