我正在阅读csv文件并从中创建一个Pandas Dataframe。它有许多不同数据类型的列。
假设“localHour”列仅包含数值,但不幸的是它包含“null”值,因为它可以在Microsoft Excel / Open Office应用程序中看到,甚至Pandas中的unique()方法也显示它包含“ null“values
df1['localHour'].unique()
Out[78]:
array(['9', '12', '17', '16', '22', '19', '11', '15', '6', '18', '7', '21',
'13', '20', '23', '10', '14', '8', '5', '3', '1', '0', '2', '4',
'null', '-1'], dtype=object)
但令人惊讶的是isnull()方法在列中找不到任何空值。我无法理解这里有什么问题。
df1['localHour'].isnull().values.any()
Out[80]: False
df1['localHour'].isnull().unique()
Out[81]: array([False], dtype=bool)
答案 0 :(得分:3)
这些不是数字,而是数字的字符串表示
并且Python不理解字符串'null'
来表示None
或NaN
或其他类似的空引用。原样,'null'
只被视为包含字符n-u-l-l
的字符串。
使用to_numeric()
转换列,然后您会看到正确识别空值。
df1 = pd.DataFrame({"localHour":['9', '12', '17', '16', '22', '19',
'11', '15', '6', '18', '7', '21',
'13', '20', '23', '10', '14', '8',
'5', '3', '1', '0', '2', '4', 'null', '-1']})
df1.localHour = pd.to_numeric(df1.localHour, errors="coerce")
df1.localHour.tail()
21 0.0
22 2.0
23 4.0
24 NaN
25 -1.0
Name: localHour, dtype: float64
df1.localHour.tail().isnull()
21 False
22 False
23 False
24 True
25 False
Name: localHour, dtype: bool
答案 1 :(得分:1)
pandas.isnull(OBJ) 检测缺失值(数值数组中的NaN,对象数组中的无/ NaN)
来源:https://pandas.pydata.org/pandas-docs/version/0.21/generated/pandas.isnull.html
您的熊猫阵列属于string
类型且包含
["9","12, ...])"
和[ ..., "null", ...]
None
中的任何一个都不是myvalue = None
。
如果将它们转换为int并强制错误 - 字符串"null"
将成为int数组中的NaN
- 因为它不能转换为int。之后你可以用它来检测它isnull()
。您还可以在panda数组中搜索"null"
- 字符串,并将其替换为None
,并按原样保留所有其他列。
之后None
也可以检测到padans.isnull(.)
。
答案 2 :(得分:0)
在这里的几个人的帮助下,我发现Pandas的read_csv方法有一个参数“na_values”。如果我们传递值(我们认为应该被解释为NaN),那么数据帧中存在的那些值将被解释为“NaN”而不是字符串值。
例如在我的例子中,字符串“null”应该被解释为“NaN”。因此,如果我使用na_values参数创建一个Dataframe,那么我的Dataframe将不会有字符串“null”值。从命令输出中可以看出,所有这些值都被替换为NaN。
df1 = pd.read_csv("Train_Dataset.csv",na_values="null")
df1['localHour'].unique()
Out[97]:
array([ 9., 12., 17., 16., 22., 19., 11., 15., 6., 18., 7.,
21., 13., 20., 23., 10., 14., 8., 5., 3., 1., 0.,
2., 4., nan, -1.])
df1['localHour'].isnull().values.any()
Out[98]: True
df1['localHour'].isnull().unique()
Out[99]: array([False, True], dtype=bool)
附加说明:如果有人想在“na_values”参数中提及更多值,请将所有值作为列表提及
df1 = pd.read_csv("Train_Dataset.csv",na_values=["null","Null","nUlL"])
有用的参考链接 - https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html
答案 3 :(得分:0)
对于空格或表示为字符串的空值可以使用na_values中的空格
data1 = pd.read_csv(r"E:\intellipaat\r\customer_churn.csv",na_values=" ")