根据条件修改DataFrame列值

时间:2019-02-23 11:59:30

标签: python pandas

我正在尝试根据条件修改Datframe列的字符串格式。

这是文件的示例

The DataFrame

现在,如您所见,对象列的值以http或大写字母开头:我想这样:

  1. 如果字符串以http开头,则将其放在<>
  2. 之间
  3. 如果字符串以大写字母开头,则将其格式设置为“ +字符串+” +'@en'

但是,我似乎无法做到这一点:我试图使用.startswith(h)或contains('http')来简化条件,但是它不起作用,因为我知道它实际上会返回布尔值列表,而不是单个条件。 也许这很简单,但我无法解决,感谢您的帮助。

这是我的代码

import numpy as np
import pandas as pd
import re
ont1 = pd.read_csv('1.tsv',sep='\t',names=['subject','predicate','object'])
ont1['subject'] = '<' + ont1['subject'] + '>'
ont1['predicate'] = '<' + ont1['predicate'] + '>'

2 个答案:

答案 0 :(得分:0)

因此,您似乎在这里拥有许多正确的内容,您提到了布尔索引,您可以使用它来选择和更新某些行,例如,我将在虚拟DataFrame上执行此操作:

df = pd.DataFrame({"a":["http://akjsdhka", "Helloall", "http://asdffa", "Bignames", "nonetodohere"]})

首先,我们可以找到以“ http”开头的行:

mask = df["a"].str.startswith("http")
df.loc[mask, "a"] = "<" + df["a"] + ">"

然后,我们更新该掩码为true的行,其他条件相同:

mask2 = df["a"].str[0].str.isupper()
df.loc[mask2, "a"] = "\"" + df["a"] + "\"@en"

最终结果:

                   a
0  <http://akjsdhka>
1      "Helloall"@en
2    <http://asdffa>
3      "Bignames"@en
4       nonetodohere

答案 1 :(得分:0)

尝试: ont1.loc [['subject']。str.startsWith(“ http”),'subject'] =“ <” + ont1 ['subject'] +“>”

参考阅读:

https://www.shanelynn.ie/select-pandas-dataframe-rows-and-columns-using-iloc-loc-and-ix/

相关问题