昨天学校发通知又要线上教学了,虽然我已经没有课了,但内心还是雀跃的,因为原本定在今天的泵与泵站期末考试推迟了,前几天课设掏空了我的身体和精神,所以复习的一般般,延迟考试正好给我一个小小的缓冲(虽然明天又开始下一门课设)。
今天回顾的是如何删除和填充dataframe里的NAN项
删除DataFrame的NAN项
首先来创建一个随机的列表
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.random.randn(4,5),index = [1,2,3,4],columns = [1,2,3,4,5])
print(df1)
得到:
1 2 3 4 5 1 -1.546927 -0.547232 0.555072 -1.098828 0.905964 2 -0.450134 -0.092281 -0.649352 -0.502235 2.334838 3 0.563237 -0.707042 -0.765892 -1.220365 0.564507 4 0.245335 -0.421005 -0.538063 -1.385316 -1.114412
然后创建NAN项
df1.iloc[:2,:2]= None
print(df1)
得到:
1 2 3 4 5 1 NaN NaN 0.555072 -1.098828 0.905964 2 NaN NaN -0.649352 -0.502235 2.334838 3 0.563237 -0.707042 -0.765892 -1.220365 0.564507 4 0.245335 -0.421005 -0.538063 -1.385316 -1.114412
删除带有NAN的行
print(df1.dropna())
得到 :
1 2 3 4 5 3 0.563237 -0.707042 -0.765892 -1.220365 0.564507 4 0.245335 -0.421005 -0.538063 -1.385316 -1.114412
填充DataFrame的NAN项
还是利用df1,利用fillna()函数奖所有的NAN项填充为0
print(df1.fillna(0))
得到:
1 2 3 4 5 1 0.000000 0.000000 -2.455083 0.560872 0.370304 2 0.000000 0.000000 1.249256 -0.554457 0.171125 3 -2.813881 0.241119 -0.009247 0.405355 0.002170 4 -0.285539 1.417155 -0.414919 -0.384334 -0.033280
也可以利用fillna()分别填充各列
print(df1.fillna({1:"haha",2:"hihi"}))
得到:
1 2 3 4 5 1 haha hihi -0.812435 -0.531604 -0.838016 2 haha hihi -1.738053 0.693169 -1.034070 3 -1.527261 0.796225 -0.814537 1.097067 0.848974 4 -0.170888 -0.196427 -2.186483 0.337456 -0.535711
也可以根据数据要求进行平均值填充,即填充值为本列其他数据的平均值,代码如下:
print(df1.fillna({1:df1[1].mean(),2:df1[3].mean()}))
得到:
1 2 3 4 5 1 -0.193138 -0.155482 -0.507152 0.426580 0.423255 2 -0.193138 -0.155482 -0.079421 -1.195980 -1.325161 3 0.592448 -0.050052 -1.189977 0.064700 -1.378064 4 -0.978724 -1.141304 1.154622 -0.784549 0.564463