已更新
问题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)
答案 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