In your code snippet above you have a double equals ==
rather than single in your else
else:
row[1] == row[0] #if entry has a number, copy that number into the new DIR_int column
This won't work. You need to use
else:
row[1] = row[0] #if entry has a number, copy that number into the new DIR_int column
But probably what is breaking your code is that you're not checking for empty values (or values with spaces) rather than Null values. The following code snippet should work. It checks that there is a value in the cell, and if it is that it isn't a space. Any spaces, empty cells, or Nulls are transferred into the new column as a Null value.
cursor = da.UpdateCursor(points, ["DIRECTION_", "DIR_int"])
for row in cursor:
if not row[0] == None and len(row[0]) > 0: # Check if row[0] has a value
rowValue = row[0].strip() # Strips any leading/trailing spaces
if rowValue == 'n':
row[1] = 0
elif rowValue == 'e':
row[1] = 90
elif rowValue == 's':
row[1] = 180
elif rowValue == 'w':
row[1] = 270
elif rowValue == 'ne':
row[1] = 45
elif rowValue == 'nw':
row[1] = 315
elif rowValue == 'se':
row[1] = 135
elif rowValue == 'sw':
row[1] = 225
elif rowValue.isnumeric(): # Checks if the value is a number
row[1] = rowValue
else: # If it still doesn't work, make it a Null
row[1] = None
else: # If row[0] doesn't have a value, then set row[1] to Null
row[1] = None
cursor.updateRow(row)
Here is a screenshot of my output - I've used your values (as far as I can tell regarding empty values) plus added a few more to test.

EDIT:
Working on FelixIP's suggestion above about using a Dictionary, the following looks a lot easier to read (and edit):
cursor = da.UpdateCursor(points, ["DIRECTION_", "DIR_int"])
def directions(value):
dirDict = {
'n': 0,
'e': 90,
's': 180,
'w': 270,
'ne': 45,
'nw': 315,
'se': 135,
'sw': 225
}
return dirDict.get(value, None)
for row in cursor:
if row[0] and len(row[0]) > 0: # Check if row[0] has a value
rowValue = row[0].strip().lower() # Strips any leading/trailing spaces
if rowValue.isnumeric(): # If it's numeric, just use the existing value
row[1] = rowValue
else: # If it's not numeric, then look it up in the dictionary
row[1] = directions(rowValue)
else: # If row[0] doesn't have a value, then set row[1] to Null
row[1] = None
cursor.updateRow(row)