【发布时间】:2018-11-02 15:48:40
【问题描述】:
我有一个包含很多字符串的 DataFrame 和一个根据条件在字符串中插入字符的函数。问题是我的代码以某种方式错误地看到了输入字符串s。
列表s 由两个列表中的元素组成:(1) 成员列表 (2) 非成员列表。我的目标是在任何“成员”后面跟着任何两个“非成员”时将数字“1”插入s。 s 最多应添加一个“1”。这是代码。
import pandas as pd
members = ['AA', 'BBB', 'CC', 'DDDD']
non_members = ['EEEE', 'FF', 'GGG', 'HHHHH', 'III', 'JJ']
s = ['AA', 'EEEE', 'GGG', 'FF']
所以我试图为 s 实现的结果是得到以下输出:
['AA', '1', 'EEEE', 'GGG', 'FF']
这是我的代码:
df = pd.DataFrame(s, columns =['string'])
d = df['string']
def func(row):
out = ""
look = 2
for i in range(len(row)-look):
out += row[i]
if (row[i] in members) & \
(row[i+1] in non_members) & \
(row[i+2] in non_members):
out += '1' + row[i+1:]
break
return out
e = d.apply(func)
print(e)
这给出了以下结果:
0
1 EE
2 G
3
但我希望得到的是:
['AA', '1', 'EEEE', 'GGG', 'FF']
有什么建议可以解决这个问题吗?
这个问题和这个有关:How to add a character to a list if two items from another list appear consecutively? Python
【问题讨论】:
-
你的想法中的问题是
row[i], row[i+1], ...的行为不像你期望的那样,尝试print他们你会看到你没有访问下一行,而是更多你的字符串的字符 -
是的,谢谢,我确实注意到了。但无法弄清楚如何在列表中的项目之间插入“1”,而不是在列表中的项目内。
标签: python-3.x list pandas