"fillna" python 中的命令未返回意味着使用 pandas
"fillna" command in python not returning mean using pandas
我正在尝试 运行 python 中的 fillna 命令。它根本无法用任何东西替换 Nan 值,而且它不会 return 错误。
import pandas as pd
import io
import requests
import numpy as np
url='https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data'
s=requests.get(url).content
df=pd.read_csv(io.StringIO(s.decode('utf-8')))
df.columns=['Scn', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9', 'A10', 'CLASS']
df.to_csv("wisconsinbreast.csv")
m,n=df.shape
#print(m,n)
df = df.replace('?', np.nan)
#print(df)
#print(df.mean())
print(df.fillna(df.mean()))
第22行,Nan还在。我已经完成了通过在此处搜索问题可以找到的所有内容,但这甚至没有给我关于失败原因的反馈。据我了解,df.mean 应该在没有 Nan 值的情况下进行计算,但是 df.mean 不会 return 包含 Nan 的列的值。
na_values
在 read_csv
那 '?'
把一切都搞砸了。当 read_csv
看到它时,它假定整个列都是 dtype object
并将其作为字符串读入。当然,你可以在事后解决这个问题,但我建议在开始时使用 na_values
参数来阻止它:
df = pd.read_csv(io.StringIO(s.decode('utf-8')), na_values=['?'])
pd.to_numeric
但如果你真的想在事后修复它,请执行此操作而不是 replace
df.A7 = pd.to_numeric(df.A7, errors='coerce')
无论哪种情况,fillna
之后都会按预期工作
df.fillna(df.mean())
Scn A2 A3 A4 A5 A6 A7 A8 A9 A10 CLASS
0 1002945 5 4 4 5 7 10.000000 3 2 1 2
1 1015425 3 1 1 1 2 2.000000 3 1 1 2
2 1016277 6 8 8 1 3 4.000000 3 7 1 2
3 1017023 4 1 1 3 2 1.000000 3 1 1 2
4 1017122 8 10 10 8 7 10.000000 9 7 1 4
5 1018099 1 1 1 1 2 10.000000 3 1 1 2
6 1018561 2 1 2 1 2 1.000000 3 1 1 2
7 1033078 2 1 1 1 2 1.000000 1 1 5 2
8 1033078 4 2 1 1 2 1.000000 2 1 1 2
9 1035283 1 1 1 1 1 1.000000 3 1 1 2
10 1036172 2 1 1 1 2 1.000000 2 1 1 2
11 1041801 5 3 3 3 2 3.000000 4 4 1 4
12 1043999 1 1 1 1 2 3.000000 3 1 1 2
13 1044572 8 7 5 10 7 9.000000 5 5 4 4
14 1047630 7 4 6 4 6 1.000000 4 3 1 4
15 1048672 4 1 1 1 2 1.000000 2 1 1 2
16 1049815 4 1 1 1 2 1.000000 3 1 1 2
17 1050670 10 7 7 6 4 10.000000 4 1 2 4
18 1050718 6 1 1 1 2 1.000000 3 1 1 2
19 1054590 7 3 2 10 5 10.000000 5 4 4 4
20 1054593 10 5 5 3 6 7.000000 7 10 1 4
21 1056784 3 1 1 1 2 1.000000 2 1 1 2
22 1057013 8 4 5 1 2 3.548387 7 3 1 4
23 1059552 1 1 1 1 2 1.000000 3 1 1 2
24 1065726 5 2 3 4 2 7.000000 3 6 1 4
我正在尝试 运行 python 中的 fillna 命令。它根本无法用任何东西替换 Nan 值,而且它不会 return 错误。
import pandas as pd
import io
import requests
import numpy as np
url='https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data'
s=requests.get(url).content
df=pd.read_csv(io.StringIO(s.decode('utf-8')))
df.columns=['Scn', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9', 'A10', 'CLASS']
df.to_csv("wisconsinbreast.csv")
m,n=df.shape
#print(m,n)
df = df.replace('?', np.nan)
#print(df)
#print(df.mean())
print(df.fillna(df.mean()))
第22行,Nan还在。我已经完成了通过在此处搜索问题可以找到的所有内容,但这甚至没有给我关于失败原因的反馈。据我了解,df.mean 应该在没有 Nan 值的情况下进行计算,但是 df.mean 不会 return 包含 Nan 的列的值。
na_values
在 read_csv
那 '?'
把一切都搞砸了。当 read_csv
看到它时,它假定整个列都是 dtype object
并将其作为字符串读入。当然,你可以在事后解决这个问题,但我建议在开始时使用 na_values
参数来阻止它:
df = pd.read_csv(io.StringIO(s.decode('utf-8')), na_values=['?'])
pd.to_numeric
但如果你真的想在事后修复它,请执行此操作而不是 replace
df.A7 = pd.to_numeric(df.A7, errors='coerce')
无论哪种情况,fillna
之后都会按预期工作
df.fillna(df.mean())
Scn A2 A3 A4 A5 A6 A7 A8 A9 A10 CLASS
0 1002945 5 4 4 5 7 10.000000 3 2 1 2
1 1015425 3 1 1 1 2 2.000000 3 1 1 2
2 1016277 6 8 8 1 3 4.000000 3 7 1 2
3 1017023 4 1 1 3 2 1.000000 3 1 1 2
4 1017122 8 10 10 8 7 10.000000 9 7 1 4
5 1018099 1 1 1 1 2 10.000000 3 1 1 2
6 1018561 2 1 2 1 2 1.000000 3 1 1 2
7 1033078 2 1 1 1 2 1.000000 1 1 5 2
8 1033078 4 2 1 1 2 1.000000 2 1 1 2
9 1035283 1 1 1 1 1 1.000000 3 1 1 2
10 1036172 2 1 1 1 2 1.000000 2 1 1 2
11 1041801 5 3 3 3 2 3.000000 4 4 1 4
12 1043999 1 1 1 1 2 3.000000 3 1 1 2
13 1044572 8 7 5 10 7 9.000000 5 5 4 4
14 1047630 7 4 6 4 6 1.000000 4 3 1 4
15 1048672 4 1 1 1 2 1.000000 2 1 1 2
16 1049815 4 1 1 1 2 1.000000 3 1 1 2
17 1050670 10 7 7 6 4 10.000000 4 1 2 4
18 1050718 6 1 1 1 2 1.000000 3 1 1 2
19 1054590 7 3 2 10 5 10.000000 5 4 4 4
20 1054593 10 5 5 3 6 7.000000 7 10 1 4
21 1056784 3 1 1 1 2 1.000000 2 1 1 2
22 1057013 8 4 5 1 2 3.548387 7 3 1 4
23 1059552 1 1 1 1 2 1.000000 3 1 1 2
24 1065726 5 2 3 4 2 7.000000 3 6 1 4