我正在尝试根据条件修改Datframe列的字符串格式。
这是文件的示例
现在,如您所见,对象列的值以http或大写字母开头:我想这样:
但是,我似乎无法做到这一点:我试图使用.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'] + '>'
答案 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/