【问题标题】:Assigning different values in Python Pandas based on criteria根据标准在 Python Pandas 中分配不同的值
【发布时间】:2014-11-18 19:02:41
【问题描述】:

我正在尝试清理数据。对于名字变量,我想 1) 为那些只有一个字符的条目分配缺失值 (NaN),2) 如果它只包含两个字符并且其中一个字符是符号,则分配缺失值(即:" ." 或 "?"),以及 3) 将 "wm" 转换为字符串 "william"

我尝试了以下代码和其他代码,但似乎都不起作用:

将熊猫导入为 pd 从熊猫导入数据框,系列 将 numpy 导入为 np 重新导入

def CleanUp():

    data = pd.read_csv("C:\sample.csv")
    frame2 = DataFrame(data)
    frame2.columns = ["First Name", "Ethnicity"]

    # Convert weird values to missing value
    for Name in frame2["First_Name"]:
        if len(Name) == 1:
            Name == np.nan
        if (len(Name) == 2) and (Name.str.contain(".|?|:", na=False)):
            Name == np.nan
        if Name == "wm":
            Name == "william"

    print frame2["First_Name"]

【问题讨论】:

  • pandas 的魔力在于不进行迭代,除非绝对必要。你不必。查看 pandas.DataFrame.replace:pandas.pydata.org/pandas-docs/dev/generated/…
  • 我尝试以下方法:frame2["First_Name"].replace(to_replace="wm", value="william")。没用。
  • 在我下面的示例中有效。让我知道什么不适合你

标签: python-2.7 pandas missing-data data-manipulation


【解决方案1】:

您正在寻找df.replace

补一些数据:

np.random.seed(3)
n=6
df = pd.DataFrame({'Name' : np.random.choice(['wm','bob','harry','chickens'], size=n), 
                   'timeStamp' : np.random.randint(1000, size=n)})
print df

       Name  timeStamp
0     harry        256
1        wm        789
2       bob        659
3  chickens        714
4        wm        875
5        wm        681

运行替换:

df.Name = df.Name.replace('wm','william')
print df

       Name  timeStamp
0     harry        256
1   william        789
2       bob        659
3  chickens        714
4   william        875
5   william        681

【讨论】:

  • 谢谢它的工作。我忘记将值设置为等于 'frame2["First_Name"] = frame2["First_Name"].replace(to_replace="wm", value="william") 中的新值。谢谢。
  • 这不会是你最后一次犯这个错误。我一直这样做;)
猜你喜欢
  • 2017-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-24
  • 1970-01-01
  • 2012-11-16
  • 2020-03-09
  • 2019-08-15
相关资源
最近更新 更多