Python pandas PostgreSQL处理NaN
1、Excel表格
1、在Excel表格,当单元格输入的是“nan,Nan, NaN, naN, nAn”时
2、使用python pandas读取Excel表格
df = pd.read_excel(file_name, header=None, sheet_name=None)
sheet = df['sheet1']
sheet = sheet.fillna(sheet.notnull(), inplace=False)
# pandas预处理数据时,只把NaN,nan处理为False,如果是NAN,nAn...时,它会当成字符串的
3、使用python pandas读取Excel表格
# 模型models.py
class Student(models.Models)
name = models.CharField(max_length=256, brank=Ture)
number = models.IntegerField(null=Ture)
score = models.IntegerField(null=Ture)
total = models.IntegerField(null=Ture)
# 注意
# null 表示值不存在
# brank 表示值为空(还是有值的,只是值为空)
# brack与null不存在相等关系
# 视图views.py (代码不全)
check_field = ["number","score","total"]
def check(student_dic):
res = {}
for key, value in student_dic.items():
if value is False:
value = None if key in check_field else ''
else:
if str(value).lower() == 'nan':
value = None if key in check_field else ''
if key in check_field:
if type(value) == "str":
raise ValueError
res[key] = value
reture res
keys = ["name","number","score","total"]
values = sheet.iloc[23, 0:3]
student_dic = dic(zip(keys, values))
student_obj = Student.objects.update(**check(student_dic))
# 当保存PostgreSQL数据库时,NaN不区分大小写,都认为是一个无穷大的数值,
# 而pandas是区分大小写的,所以当数据为NAN,满足数据库类型约束(NAN是一个数值),
# 但是pandas认为是字符串‘NAN’,不会处理NAN,最后数据库保存为NaN