![](/img/trans.png)
[英]Python Pandas DataFrame replace: strip string from trailing numbers
[英]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.