从字符串列表中删除插入符号的方法?

Method to remove a caret from list of strings?

我有一个字符串列表,在某些字符串中,包含一个插入符号,后面有几个随机数。

例如:

strings = [MyString1^111,
           MyString2,
           MyString3,
           MyString4^222,
           MyString5^888]

我的程序的最终目标是删除插入符号,但之后保留数字,然后使用在“字典 DF”中找到的 AverageTime 值将字符串放入 pandas DataFrame,如果不是在“字典DF”中,使用2.91。我尝试使用替换函数,虽然它可以消除字符串列表中的插入符号,但它无法在 DataFrame 中使用。

这是“字典 DF”的样子:

dictionary = [MyString2 : 3.76,
              MyString3 : 2.66]

字典中的两列是“Name_Of_String”和“AverageTime”

这是我目前的情况:

noCaret = []
for i in strings:
    noCaret.append(i.replace('^', ''))


stringsDF = dictionary[dictionary.Name_Of_String.isin(noCaret)]
for i in noCaret:
    if stringsDF['Name_of_String'].str.contains(i).any():
        pass
    else:
        stringsDF.loc[(len(testDFu.Name_Of_String))-1] = [i, np.nan]


stringsDF.fillna(2.91, inplace = True)
stringsDF

stringsDF = [MyString1^111 : 2.91,
             MyString2     : 3.76]

当我 运行 这样做时,我收到一个部分 DataFrame,其中 none 包含带有插入符号的字符串。我该如何解决这个问题?谢谢!

编辑:我包括了“字典 DF”、输出的字符串 DF 的样子,以及列名。

import pandas as pd

new_strings = []

strings = ['MyString1^111',
           'MyString2',
           'MyString3',
           'MyString4^222',
           'MyString5^888']

for i in strings:
    new_strings.append(i.replace('^', ''))    

df = pd.DataFrame(new_strings)

print(df)

输出:

0  MyString1111
1  MyString2
2  MyString3
3  MyString4222
4  MyString5888

这会产生您正在寻找的结果,我认为:一个包含 2 列的数据框,Name_of_StringAverageTimestrings 中的所有项目都包括在内,那些是不在字典中 AverageTime 作为 2.91.

输入代码时要小心,您在问题中的 Name_of_StringName_Of_String 之间切换,这会产生错误(如果它们应该在同一列)。此外,字典使用 {} 而不是 [],后者不能使用 key: value 对。

import pandas as pd

strings = ['MyString1^111',
           'MyString2',
           'MyString3',
           'MyString4^222',
           'MyString5^888']

noCaret = [x.replace('^', '') for x in strings]

dictionary = {"MyString2": 3.76, "MyString3": 2.66}

stringsDF = pd.DataFrame(data={"Name_of_String": noCaret})
stringsDF["AverageTime"] = stringsDF["Name_of_String"].map(dictionary).fillna(2.91)

stringsDF
#Out: 
#  Name_of_String  AverageTime
#0   MyString1111         2.91
#1      MyString2         3.76
#2      MyString3         2.66
#3   MyString4222         2.91
#4   MyString5888         2.91