在Python中删除数据帧的每列中的字符和重复单词
我有一个数据帧:在Python中删除数据帧的每列中的字符和重复单词,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据帧: index A 0 {"word1"} 1 {"word2, word2, word2"} 2 {"word3, word3, word3, word3, word3"} 3 {"word36"} ..... 987 {"word768, word768"} 我的目标是删除A列每行中的花括
index A
0 {"word1"}
1 {"word2, word2, word2"}
2 {"word3, word3, word3, word3, word3"}
3 {"word36"}
.....
987 {"word768, word768"}
我的目标是删除A列每行中的花括号和引号,并将重复的单词减少为一个实例
因此,我期望的结果如下:
index A
0 word1
1 word2
2 word3
3 word36
.....
987 word768
我一直试图分别解决这两个目标(替换重复和删除字符)。要删除花括号和引号字符,我已尝试在每行上迭代并应用str.replace
:
for ind in df.index:
df['A'].str.replace(' "{ ', " ")
df['A'].str.replace(' }" ', " ")
这好像没什么用?当我打印(df)时,它会给我原始的数据帧,没有任何变化
对于副本,我尝试过:
df.drop_duplicates(['A'])
但是,这只是删除整行的重复项(这在其自身方面很有用,但不是我要找的)
接下来,我尝试了在stack exchange上找到的一些方法:
from collections import OrderedDict
df['A2'] = (df['A'].str.split()
.apply(lambda x: OrderedDict.fromkeys(x).keys())
.str.join(' '))
这段代码(只是为了删除重复项)没有给我一个错误,但它添加了一个新的列(A2),它与a完全相同。我对python非常陌生,所以我不了解这个最新堆栈示例的完整工作原理
对此问题的任何反馈都将不胜感激
编辑:A列的条目都是字符串类型
编辑2:
根据一位用户的建议,我做了以下工作:
df[“A”].str.extract(“(\w+”)
这将返回一个数据帧,该数据帧删除所需的字符并返回字符串中的第一个单词-该数据帧确实删除了重复的字符,但是它会删除一些包含多个非重复单词的字符串
例如:
index A
85 {"word1, word2"}
变成
index A
85 {word1}
我也希望包括所有不重复的单词。在列上应用eval()
:
df['New'] = df['New'].apply(eval)
使用以下命令逐行读取数据:
for row in file.readlines():
现在将每行拆分为第一个单词:
b=row.split(',')
请注意,拆分器是“,”而不是空格(正如您在第二个代码中使用的那样)
现在,b[0](或b[1]取决于数据,如果索引列是数据的一部分,则使用b[1]。检查它。)是第一个字。因此,您可以附加或打印它。列A的类型是什么,字符串?是@Danimesjo,它们都是字符串。我现在将把这个细节放进去。
df[“A”].str.extract(“(\w+”)
?@HenryYik谢谢,这让我走得很远!它返回一个df,其中所有的花括号、引号都消失了,所有重复的单词都减少为一个。但是,它只给出每个条目的第一个单词-这将消除那些包含多个但不重复单词的条目。抱歉-我应该提到这一点。这将返回错误“名称'word1'未定义”。