繁体   English   中英

strip 有问题,替换 pandas 中的函数 dataframe

[英]Problem with strip, replace functions in pandas dataframe

我正在尝试使用 split() 和 replace() 函数从 pandas dataframe 字列中去除所有特殊字符。

但是,它不起作用。 特殊字符不会从单词中删除。

有人可以启发我吗?

import pandas as pd
import datetime

df = pd.read_csv("2022-12-08_word_selection.csv")

for n in df.index:
    i = str(df.loc[n, "words"])
    if len(i) > 12:
        df.loc[n, "words"] = ""
df["words"] = df["words"].str.replace("$", "s")
df["words"] = df["words"].str.strip('[,:."*+-#/\^`@}{~&%’àáâæ¢ß¥£™©®ª×÷±²³¼½¾µ¿¶·¸º°¯§…¤¦≠¬ˆ¨‰øœšÞùúûý€')
df["words"] = df["words"].str.strip("\n")
df = df.groupby(["words"]).mean()

print(df)

首先,程序会替换“单词”列中超过 12 个字符的所有单词。 然后,我希望它能从“单词”列中删除所有特殊字符。

首先,避免使用循环,而是使用transform()将长度超过 12 个字符的单词替换为空字符串。 其次,调用replace()之前不需要Series.str转换。 第三, split()仅删除前导和尾随字符,因此这不是您想要的。 改用带replace()的正则表达式。 最后,要删除特殊字符,使用正则表达式否定集来匹配和删除非字母或数字的字符会更简洁。 这看起来像: "[^A-Za-z0-9]"

以下是一些有效的示例数据和代码:

import pandas as pd
import re

df = pd.DataFrame(
    {
        "words": [
            123,
            "abcd",
            "efgh",
            "abcdefghijklmn",
            "lol%",
            "Hornbæk",
            "10:03",
            "$999¼",
        ]
    }
)
# Faster and more concise than a loop
df["words"] = df["words"].transform(lambda x: "" if len(x) > 12 else x)
# Not sure why you do this but okay
df["words"] = df["words"].replace("$", "s")
# Use a regex negative set to keep only letters and numbers
df["words"] = df["words"].replace(re.compile("[^A-Za-z0-9]"), "")
display(df)

输出:

    words
0   123
1   abcd
2   efgh
3   abcdefghijklmn
4   lol
5   Hornbk
6   1003
7   999

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM