如何使用python列表列表?

时间:2017-08-03 06:08:18

标签: python list pandas dataframe

我有以下列表的示例列表:

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)

显示错误。

如果有任何不清楚的地方,请告诉我。

4 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:6)

使用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]

答案 2 :(得分:5)

您可以先将其存储在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

答案 3 :(得分:4)

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

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

然后你可以添加

df.index += 1 

如果您愿意,可以调整起始索引。