pandas dataframe包含列表

时间:2017-02-27 21:30:55

标签: python list pandas dataframe

我目前运行以下脚本,该脚本使用Fuzzylogic替换列表中的一些常用词。数据框df1包含可能值的默认列表。数据框df2是在引用Dataframe df1之后进行转换/更改的主要数据框。代码如下:

df1 = pd.DataFrame(['one','two','three','four','five','tsst'])
df2 = pd.DataFrame({'not_shifted':[np.nan,'one','too','three','fours','five','six',np.nan,'test']})
# Drop nan value
df2=pd.DataFrame(df2['not_shifted'].fillna(value=''))
df2['not_shifted'] = df2['not_shifted'].map(lambda x: difflib.get_close_matches(x, df1[0]))

问题是输出是一个包含方括号的数据框。更糟糕的是,df2['not_shifted']中的任何文本都没有可见/可重新标记:

Out[421]: 
  not_shifted
0          []
1       [one]
2       [two]
3     [three]
4      [four]
5      [five]
6          []
7          []
8      [tsst]

请帮忙。

2 个答案:

答案 0 :(得分:1)

由@Psidom

解决的

df2.not_shifted.apply(lambda x: x[0] if len(x) != 0 else "")或简称df2.not_shifted.str[0]

答案 1 :(得分:0)

def replace_all(eg):
    rep = {"[":"",
       "]":"",
      "u":"",
      "}":"",
      "'":"",
        '"':"",
      "frozenset":""}
    for i,j in rep.items():
        eg = eg.replace(i,j)
    return eg

for each in df.columns:
    df[each] = df[each].apply(lambda x : replace_all(str(x)))