在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'未定义”。