如果数据框列是列表,则提取列表的元素会产生错误

时间:2018-01-12 06:02:02

标签: python list dataframe

我希望使用以下代码提取每个列表的第0个成员:

df["column"].apply(lambda x: x[0])

但是我收到了以下错误:

  

TypeError:'float'对象不可订阅。

1 个答案:

答案 0 :(得分:1)

我认为问题是一些NaN的值。

您可以查看:

print (df[df["column"].isnull()])

  column
2    NaN

所以你可以使用str[0]

df["column"].str[0]

样品:

df = pd.DataFrame({'column':[['a','s'],['d'], np.nan, ['s','d','f']]})
print (df)
      column
0     [a, s]
1        [d]
2        NaN
3  [s, d, f]

df['new'] = df["column"].str[0]
print (df)
      column  new
0     [a, s]    a
1        [d]    d
2        NaN  NaN
3  [s, d, f]    s
print (df["column"].apply(lambda x: x[0]))
  

TypeError:'float'对象不可订阅

floatscalar之间list之间的df = pd.DataFrame({'column':[[4.4,7.8],[1], 4.7, [4, 7.4, 1.2]]}) print (df) column 0 [4.4, 7.8] 1 [1] 2 4.7 3 [4, 7.4, 1.2] 同样错误:

list

您可以检查所有非print (df[df["column"].apply(lambda x: isinstance(x, float))]) column 2 4.7 的值:

if-else

解决方案是使用print (df["column"].apply(lambda x: x if isinstance(x, float) else x[0])) 0 4.4 1 1.0 2 4.7 3 4.0 Name: column, dtype: float64 和lambda函数:

var params = { "id": templateCategoryId };
        this.http.get(this.appService.baseUrl + 'api/UserList', { params: params }).subscribe(result => {.....
    ......