Python 如何从特定字符串中清除数据集的某些列?
我正在尝试清理我的数据集。它有几个列包含所有字符串/float/int(对于name/pay/overtimepay)值,但很少有行包含“Not provided”作为值Python 如何从特定字符串中清除数据集的某些列?,python,pandas,numpy,dataframe,data-science,Python,Pandas,Numpy,Dataframe,Data Science,我正在尝试清理我的数据集。它有几个列包含所有字符串/float/int(对于name/pay/overtimepay)值,但很少有行包含“Not provided”作为值 newData = data[~data['BasePay'].isin(['Not Provided'])] newData = data[~data['BasePay'].str.contains('Not Provided', na=False)] print(newData['BasePay'].mean()) 及
newData = data[~data['BasePay'].isin(['Not Provided'])]
newData = data[~data['BasePay'].str.contains('Not Provided', na=False)]
print(newData['BasePay'].mean())
及
清除“BasePay”列并计算平均值,但失败。如果你能帮忙,我将不胜感激 看起来您的数据在
未提供
和未提供
之间有变化,且p
较低,因此最好使用df。将
替换为regex=True
,包括此变化([pP]提供的
)。替换值的选择取决于如何处理数据,但这里我使用了numpy库中的np.NaN
。替换后,您可以在带有基本工资的列上使用fillna(0)
,但是列类型是对象
,因此在计算平均值之前需要将其解释为float(.astype(float)
)
作为数据.csv使用的输入
ID Name Occupation Pay OvertimePay BasePay Val4 Val5
0 148646 Carolyn A Wilson Human Services Technician 0 0 0 0 0.00
1 148647 Not provided Not provided Not Provided Not Provided Not Provided Not Provided 0.00
2 148648 Joann Anderson Communications Dispatcher 2 0 0 0 0 0.00
3 148649 Leon Walker Custodian 0 0 0 0 0.00
4 148650 Roy 1 Tillery Custodian 0 0 0 0 0.00
5 148651 Not provided Not provided Not Provided Not Provided Not Provided Not Provided 0.00
6 148652 Not provided Not provided Not Provided Not Provided Not Provided Not Provided 0.00
7 148653 Not provided Not provided Not Provided Not Provided Not Provided Not Provided 0.00
8 148654 Joe Lopez Counselor, Log Cabin Ranch 0 0 -618.13 0 -618.13
基本工资平均值的输出
-68.68111111111111
Stack101建议:不要粘贴图像!这将增加你得到一个好答案的机会。。。而且可能在询问后10分钟内。。。将实际数据复制并粘贴到您的问题中。。。更好的方法是,粘贴代码以生成一个只有几行的虚拟/示例数据集,这样人们就可以复制粘贴它并快速为您进行训练和回答。
import pandas as pd
import numpy as np
df = pd.read_csv("data.csv", sep=";")
print(df)
df = df.replace("Not [pP]rovided", np.NaN, regex=True)
BasePay_mean = df["BasePay"].fillna(0).astype(float).mean()
print(BasePay_mean)
-68.68111111111111