Liz*_*iza 2 python list dataframe pandas
我有以下列表的示例列表:
In [] : list1
Out [] :
[[1.0],
[2.1],
[3.3, 5.5, 0.69],
[0.69, 0.9]]
Run Code Online (Sandbox Code Playgroud)
我想只提取元素数量相等且大于2的子列表,并希望将它们存储在数据框中.
所以,我希望df如下所示:
In [] : df
Out [] :
seq_no items
1 3.3 , 5.5, 0.69
2 0.69, 0.9
Run Code Online (Sandbox Code Playgroud)
尝试:
item for item in list1 where(len(item) >2)
Run Code Online (Sandbox Code Playgroud)
显示错误.
如果有任何不清楚的地方,请告诉我.
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]
Run Code Online (Sandbox Code Playgroud)
加, 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
Run Code Online (Sandbox Code Playgroud)
如果需要一串逗号分隔 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
Run Code Online (Sandbox Code Playgroud)
使用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]
Run Code Online (Sandbox Code Playgroud)
您可以将其存储在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
Run Code Online (Sandbox Code Playgroud)
并加入他们
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
Run Code Online (Sandbox Code Playgroud)