【问题标题】:How do you pad lists in a dataframe if the lists contain 'str' values?如果列表包含“str”值,如何在数据框中填充列表?
【发布时间】:2022-01-10 19:10:24
【问题描述】:

我正试图让我的数据框从此开始:

my_list            list_length

[nan,1,2,3]        4
[1,2,nan,3,4,5]    6
[1,nan]            2

到这里:

    my_list            list_length

[nan,1,2,3,pad,pad,pad]        6
[1,2,nan,3,4,5]                6
[1,nan,pad,pad,pad,pad]        6

基本上,我需要填充数据框中的列表,以便它们都与最长的列表一样长。

我试过了:

def pad(some_list, target_len):
    aux = ['pad']*(target_len - len(some_list))
    some_list.extend(aux)
    return some_list

for i in df["audio_data"]:
    pad(i,6)

但我意识到我的问题是并非所有值都是数字。现在我正试图弄清楚如何去做。我的第一个想法是将所有 nan 值更改为 0。所以我尝试了以下代码:

for row in df["audio_data"]:
for i in row: 
    if i =='nan':
        i==0

但这并没有将任何 nan 值更改为 0。因此,如果这是前进的最佳方式,我该怎么做?我还担心如果我将所有 nan 值更改为 0,我需要用字符串填充。在我的实际数据框中,有很多不同的数字,我无法选择一个数字来表示填充。如果我尝试使用仅包含整数的列表中的字符串填充列表,我会遇到类似的问题吗?

我只需要一些方法来指示空值的位置,然后填充字符串以使它们都具有相同的长度。我到底用什么来表示 nan 值和填充并不重要。

【问题讨论】:

  • 如果不是所有的值都是数字,为什么这很重要?你用一个字符串填充。 nan 是一个 numpy 数据类型
  • 我不确定它为什么重要。它一直给我这个错误: AttributeError: 'str' object has no attribute 'extend' 虽然我不认为 nan 是一个字符串,但我不知道该错误还指的是什么。任何列表中都没有字符串值。

标签: python arrays list dataframe


【解决方案1】:

您可以apply 一个将pads 列表添加到每个列表的函数:

df.my_list = df.my_list.apply(lambda lst: lst+['pad']*(max_len-len(lst)))
df.list_length = df.my_list.str.len()

输出:

    my_list            list_length

[nan,1,2,3,pad,pad,pad]        6
[1,2,nan,3,4,5]                6
[1,nan,pad,pad,pad,pad]        6

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多