字符串比较,列平均和在熊猫中删除NaN?

时间:2018-11-26 10:14:44

标签: python pandas perceptron

已更新

问题1 :我有一个数据集,其中很多值为NaN。使用main.loc[main.isna().sum(axis=1) >= 2]输出到:

  ID:  GNDR  COUNTRY    ...         BIKE      CAR        PBLC        
    1     0     NaN     ...          NaN      NaN         NaN          
    1     0     NaN     ...          NaN      NaN         NaN
    16    1     UK      ...          123       0         10232

当然应该删除第0行和第1行吗?

问题2 : 例如,如果我的ID大于1(如上所示),则表示此人已输入数据16次。因此,我想对此进行平均,以使仅输入一次数据的人以后不会显示为我的感知器的异常值。我的想法是在将数据加载到DataFrame时,对ID大于1的所有行进行迭代平均。

示例代码
df_2 = pandas.read_csv('logs.csv', names=colnames_df_2, skiprows=[0]) df_2['ID']=df_2['ID'].apply(str)

main = df_1.merge(df_2, how='left', on='msno') main.loc[main.isna().sum(axis=1) >= 2] print(main)

2 个答案:

答案 0 :(得分:0)

对于问题1

thresh参数表示:

  

需要许多非NA值。

因此,如果您同时获得两行,则意味着数据框中没有非空值。

我在下面尝试了您的df,并且有效。

In [527]: df
Out[527]: 
   ID  GNDR  COUNTRY  BIKE  CAR  PBLC
0   1     0      NaN   NaN  NaN   NaN
1   1     0      NaN   NaN  NaN   NaN

In [528]: df = df.dropna()
Out[528]: 
Empty DataFrame
Columns: [ID, GNDR, COUNTRY, BIKE, CAR, PBLC]
Index: []

答案 1 :(得分:0)

对于问题1 ,仅显示一个示例数据集。

>>> df
     A    B    C
0  foo    2    3
1  foo  NaN  NaN
2  foo    1    4
3  bar  NaN  NaN
4  foo  NaN  NaN

df.dropna(thresh=2)遍历所有行,并使每行至少具有2个非na值。所有行都至少具有两个non-na值,因此不会被丢弃。

>>> df.dropna(thresh=2)
     A  B  C
0  foo  2  3
2  foo  1  4

NaN大于2的值

>>> df.loc[df.isna().sum(axis=1) >= 2]
     A    B    C
0  foo  NaN  NaN
2  foo  NaN  NaN
4  foo  NaN  NaN
5  NaN  NaN  NaN

要获取mean(),您可以尝试:

>>> df.B.ge(str(2))
0     True
1    False
2    False
3    False
4    False
Name: B, dtype: bool
>>>
>>>
>>> df[df.B.ge(str(2))]
     A  B  C
0  foo  2  3
>>> df[df.B.ge(str(2))]['C'].mean()
     3.0