Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫dropna在寻找平均值方面没有按预期工作_Python_Pandas - Fatal编程技术网

Python 熊猫dropna在寻找平均值方面没有按预期工作

Python 熊猫dropna在寻找平均值方面没有按预期工作,python,pandas,Python,Pandas,当我运行下面的代码时,我得到了错误: TypeError:“非类型”对象没有属性“getitem” import pyarrow import pandas import pyarrow.parquet as pq df = pq.read_table("file.parquet").to_pandas() df = df.iloc[1:,:] df = df.dropna (how="any", inplace = True) # modif

当我运行下面的代码时,我得到了错误:

TypeError:“非类型”对象没有属性“getitem

    import pyarrow 
    import pandas
    import pyarrow.parquet as pq

    df = pq.read_table("file.parquet").to_pandas()
    df = df.iloc[1:,:]
    df = df.dropna (how="any", inplace = True) # modifies it in place, creates new dataset without NAN

    average_age = df["_c2"].mean()
    print average_age
数据帧如下所示:

         _c0     _c1  _c2    
    0  RecId   Class  Age   
    1      1      1st   29   
    2      2      1st   NA   
    3      3      1st   30  
如果我在调用dropna方法后打印df,我会得到“None”


它是否应该创建一个没有“NA”的新数据帧,这样我就可以在不抛出错误的情况下获得平均年龄?

根据OP的评论,NA是一个字符串而不是NaN。所以
dropna()
在这里不好。过滤掉字符串值“NA”的许多可能选项之一是:

df = df[df["_c2"] != "NA"]
如@DJK在评论中所建议的,捕获不精确匹配的更好选项(例如,使用尾随空格):

df = df[~df["_c2"].str.contains('NA')]
此选项应删除所有字符串,而不仅仅是“NA”:

df = df[df[“_c2”].apply(lambda x: x.isnumeric())]

根据OP的评论,NA是一个字符串,而不是NaN。所以
dropna()
在这里不好。过滤掉字符串值“NA”的许多可能选项之一是:

df = df[df["_c2"] != "NA"]
如@DJK在评论中所建议的,捕获不精确匹配的更好选项(例如,使用尾随空格):

df = df[~df["_c2"].str.contains('NA')]
此选项应删除所有字符串,而不仅仅是“NA”:

df = df[df[“_c2”].apply(lambda x: x.isnumeric())]

这将起作用,如果您的df中的NA是NaN(np.NaN),这将不会影响您获取列的平均值,只有当您的NA是'NA',这是字符串时

(df.apply(pd.to_numeric,errors ='coerce',axis=1)).describe()
Out[9]: 
       _c0  _c1        _c2
count  3.0  0.0   2.000000
mean   2.0  NaN  29.500000
std    1.0  NaN   0.707107
min    1.0  NaN  29.000000
25%    1.5  NaN  29.250000
50%    2.0  NaN  29.500000
75%    2.5  NaN  29.750000
max    3.0  NaN  30.000000
更多信息

df.apply(pd.to_numeric,errors ='coerce',axis=1)# all object change to NaN and will not affect getting mean
Out[10]: 
   _c0  _c1   _c2
0  NaN  NaN   NaN
1  1.0  NaN  29.0
2  2.0  NaN   NaN
3  3.0  NaN  30.0

这将起作用,如果您的df中的NA是NaN(np.NaN),这将不会影响您获取列的平均值,只有当您的NA是'NA',这是字符串时

(df.apply(pd.to_numeric,errors ='coerce',axis=1)).describe()
Out[9]: 
       _c0  _c1        _c2
count  3.0  0.0   2.000000
mean   2.0  NaN  29.500000
std    1.0  NaN   0.707107
min    1.0  NaN  29.000000
25%    1.5  NaN  29.250000
50%    2.0  NaN  29.500000
75%    2.5  NaN  29.750000
max    3.0  NaN  30.000000
更多信息

df.apply(pd.to_numeric,errors ='coerce',axis=1)# all object change to NaN and will not affect getting mean
Out[10]: 
   _c0  _c1   _c2
0  NaN  NaN   NaN
1  1.0  NaN  29.0
2  2.0  NaN   NaN
3  3.0  NaN  30.0

请尝试
inplace=false
Yes,但如果NA是inplace=false,则不会将其删除它看起来像“RecId”、“Class”、“Age”是列名,但会出现在数据框中的值中。请尝试
inplace=false
Yes,但如果NA是inplace=false,则不会将其删除它看起来像“RecId”、“Class”、“Age”是列名,但显示在数据框的值中。使用这两个选项,我在实现dropna:TypeError(“无法将%s转换为数字“%str(x))之前遇到了错误。您的数据框是否可能包含字符串“NA”而不是NAN?是的,确实如此。我以为dropna会删除任何不是数字的东西。也许
df[~df[“\u c2”].str.contains('NA')]
,可能是精确匹配上的空间问题谢谢-肯定比我的精确匹配解决方案好,会更新答案。使用这两个选项,我在实现dropna之前遇到了一个错误:TypeError(“无法将%s转换为数字“%str(x))您的数据帧是否可能包含字符串“NA”而不是“NAN”?是的,确实如此。我想dropna会删除任何不是数字的内容。可能
df[~df[“_c2”]]。str.contains('NA')]
,可能是精确匹配上的空间问题谢谢-肯定比我的精确匹配解决方案好,将更新答案。