我有以下列表的示例列表:
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)
显示错误。
如果有任何不清楚的地方,请告诉我。
答案 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 comprehension
和seq
列range
:
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
如果您愿意,可以调整起始索引。