【问题标题】:How to work with python list of lists?如何使用 python 列表列表?
【发布时间】:2017-08-03 06:08:18
【问题描述】:

我有以下列表示例:

In [] : list1
Out [] : 
[[1.0],
 [2.1],
 [3.3, 5.5, 0.69],
 [0.69, 0.9]]

我只想提取元素数等于且大于 2 的子列表,并将它们存储在数据框中。

所以,我希望 df 如下所示:

In [] : df
Out [] : 
        seq_no       items
            1        3.3 , 5.5, 0.69
            2        0.69, 0.9

试过了:

item for item in list1 where(len(item) >2)

显示错误。

如果有什么不清楚的地方请告诉我。

【问题讨论】:

  • 您可以使用列表理解过滤列表列表。
  • filter() 或列表理解可以提供帮助。

标签: python list pandas dataframe


【解决方案1】:
In [755]: df = pd.DataFrame({'items': [x for x in list1 if len(x)>=2]})

In [756]: df
Out[756]:
              items
0  [3.3, 5.5, 0.69]
1       [0.69, 0.9]

添加,seq_no

In [759]: df['seq_no'] = df.index + 1

In [760]: df
Out[760]:
              items  seq_no
0  [3.3, 5.5, 0.69]       1
1       [0.69, 0.9]       2

如果需要用逗号分隔的字符串items

In [769]: pd.DataFrame({'items': [', '.join(map(str, x)) for x in list1 if len(x)>=2]})
Out[769]:
            items
0  3.3, 5.5, 0.69
1       0.69, 0.9

【讨论】:

  • 非常感谢,太完美了!!
【解决方案2】:

使用list comprehensionseqrange

a = [x for x in L if len(x) >=2]
df = pd.DataFrame({'seq':range(1, len(a)+1), 'items':a}, columns=['seq','items'])
print (df)
   seq                items
0    1     [3.3, 5.5, 0.69]
1    2     [0.69, 0.9]

【讨论】:

  • 不,因为它改变了列的顺序。
  • 非常感谢,第一部分是我所期望的,所有值都在 items 列下。
【解决方案3】:

您可以先将其存储在pd.Series 中,然后进行过滤和转换。

s = pd.Series(list1)
pd.DataFrame(s[s.str.len().ge(2)].tolist())

      0     1     2
0  0.00  0.50  0.69
1  0.69  0.88  1.00
2  1.00  1.10   NaN
3  1.10  2.00   NaN
4  2.00  2.50  2.90

加入他们

s = pd.Series(list1)
s[s.str.len().ge(2)].apply(lambda x: ', '.join(map(str, x)))

2      0.0, 0.5, 0.69
3     0.69, 0.88, 1.0
4            1.0, 1.1
8            1.1, 2.0
10      2.0, 2.5, 2.9
dtype: object

【讨论】:

  • 这符合我的建议,但更好!但是我认为 OP 希望他们加入。
【解决方案4】:

应该这样做(使用列表理解):

import pandas as pd
df = pd.Series([sublist for sublist in list1 if len(sublist) >= 2])

然后你可以添加

df.index += 1 

根据需要调整起始索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 2011-03-10
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 2021-07-19
    相关资源
    最近更新 更多