字符串比较、列平均和删除Pandas中的NaN?

2024-10-03 19:29:54 发布

您现在位置:Python中文网/ 问答频道 /正文

更新

问题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次数据。因此,我想平均这一点,这样的人谁只输入了一次数据不会显示为离群值我的感知器以后。我的想法是迭代平均所有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)


Tags: csv数据iddfmainnancarcountry
2条回答

对于问题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值的每一行。所有行至少有两个非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

对于问题1

thresh参数表示:

Require that many non-NA values.

因此,如果您同时得到这两行,这意味着数据帧中没有非空值。你知道吗

我试过用你的测向仪在下面,它的工作。你知道吗

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: []

相关问题 更多 >