我有一个看起来像这样的 pandas dataframe:
Size Measure Location Messages
Small 1 Washington TXT0123 TXT0875 TXT874 TXT0867 TXT0875 TXT0874
Medium 2 California TXT020 TXT017 TXT120 TXT012
Large 3 Texas TXT0123 TXT0123 TXT0123 TXT0123 TXT0217 TXT0206
Small 4 California TXT020 TXT0217 TXT006
Tiny 5 Nevada TXT0206 TXT0217 TXT0206
如果长度等于 7 且第四个字符为 0,我将尝试从 Messages 列中的单个单词中删除 0。
我试过 for 循环,但它删除了所有 0:
for line in df.Messages:
for message in line.split():
if len(message) == 7 and message[3] == '0':
print(message.replace('0', ''))
我还尝试了 .map ,这给了我一些错误:
df.Messages = df.Messages.map(lambda x: x.replace('0', '') for message in line.split() for line in df.Messages if (len(message) == 7 and message[3] == '0'))
TypeError: 'generator' object is not callable
有没有办法使用包含 if 和 and 条件的 .map 来做到这一点?
请您参考如下方法:
鉴于您希望对每个单词执行此操作,首先使用 str.split 拆分您的列,调用 apply,然后使用 str 重新加入。加入:
def f(l):
return [w.replace('0', '') if len(w) == 7 and w[3] == '0' else w for w in l]
df.Messages.str.split().apply(f).str.join(' ')
0 TXT123 TXT875 TXT874 TXT867 TXT875 TXT874
1 TXT020 TXT017 TXT120 TXT012
2 TXT123 TXT123 TXT123 TXT123 TXT217 TXT26
3 TXT020 TXT217 TXT006
4 TXT26 TXT217 TXT26
Name: Messages, dtype: object
如果您只想替换单个 0(而不是全部),请在函数 f 中使用 w.replace('0', '', 1) > 相反。
