我能';t使用python';s";替换“;使我的0成为缺少的值(0->;np.nan)

我能';t使用python';s";替换“;使我的0成为缺少的值(0->;np.nan),python,Python,我使用pandas从云中读取csv文件,使用replace()并希望0成为丢失的值,但它似乎不起作用 我使用谷歌的colab 我尝试了两种方法: user_data = user_data.replace(0,np.nan) # first user_data.replace(0,np.nan,inplace = True) # second user_data.head() # I use this to view the data. 但数据与我第一次读取时相同,0没有变化 这里是我读取

我使用pandas从云中读取csv文件,使用replace()并希望0成为丢失的值,但它似乎不起作用

我使用谷歌的colab

我尝试了两种方法:

user_data = user_data.replace(0,np.nan) # first 
user_data.replace(0,np.nan,inplace = True) # second

user_data.head() # I use this to view the data.
但数据与我第一次读取时相同,0没有变化

这里是我读取文件的函数,我使用block方法

# Read function
def get_df2(file):
    mydata2 = []
    for chunk in pd.read_csv(file,chunksize=500000,header = None,sep='\t'):
        mydata2.append(chunk)
    user_data = pd.concat(mydata2,axis=0)
    names2=['user_id','age','gender','area','status']
    user_data.columns = names2
    return user_data

# read
user_data_path = 'a_url'
user_data = get_df2(user_data_path)
user_data.head()

注意:我的代码不会报告错误,它会输出结果,但这不是我想要的

您的
0
s可能只是字符串,请尝试使用:

user_data = user_data.replace('0', np.nan)

在这种情况下,Python可能会变得令人恼火

正如前面指出的,这可能是因为0是字符串而不是整数。 可以由

user_data.replace("0",np.nan,inplace = True)
但是,我想指出的是,在您知道什么类型的数据应该位于pandas dataframe中的列中的情况下,您应该显式地将其设置为该类型,这样,无论何时出现这种情况,都会出现错误,并且您将确切地知道问题所在

在您的情况下,列是:

names2=['user_id','age','gender','area','status']
让我们假设

  • 用户id为字符串
  • 年龄是整数
  • 性别就是绳子
  • 区域是字符串
  • 状态为字符串
您可以通过

user_data = userdata.astype({"user": str, "age": integer, "gender": str, "area": str, "status": str})

还有很多其他方法可以做到这一点,如下所述。选择适合您或您需要的选项。

请检查您的0是数字还是字符串。我曾经遇到过同样的问题,列是字符串列而不是数字。因此,替换将不起作用。请尝试将
0
替换为
“0”
,因为我认为您的
0
可能是个字符串哦,非常感谢,它解决了我的问题。这个问题困扰了我很长时间。我以前没有注意到字符串的限制。谢谢你的建议,我有一些收获,我以后会注意这方面的。