Python 数据帧到一系列列表

Python 数据帧到一系列列表,python,python-3.x,pandas,list,dataframe,Python,Python 3.x,Pandas,List,Dataframe,假设我有以下数据帧: df =pd.DataFrame({'col1':[5,'',2], 'col2':['','',1], 'col3':[9,'','']}) print(df) col1 col2 col3 5 9 1 2 2 1 有没有一种简单的方法可以将其转换为列表的pd.Series,避免使用空元素?因此: 0 [5,9] 1 [1] 2 [2,2,1] 将列表理解与删除空值一起使用: L =

假设我有以下数据帧:

df =pd.DataFrame({'col1':[5,'',2], 'col2':['','',1], 'col3':[9,'','']})  
print(df)

col1 col2 col3
       5    9
 1               
 2     2    1     
有没有一种简单的方法可以将其转换为列表的
pd.Series
,避免使用空元素?因此:

0 [5,9]
1 [1]
2 [2,2,1]

将列表理解与删除空值一起使用:

L = [x[x != ''].tolist() for i, x in df.T.items()]
s = pd.Series(L, index=df.index)
或使用参数“拆分”将值转换为列表:

L = df.to_dict(orient='split')['data']
print (L)
[[5, '', 9], ['', '', ''], [2, 1, '']]
然后删除空值:

s = pd.Series([[y for y in x if y != ''] for x in L], index=df.index)

print (s)
0    [5, 9]
1        []
2    [2, 1]
dtype: object

可按以下方式进行:

# Break down into list of tuples
records = df.to_records().tolist()

# Convert tuples into lists
series = pd.Series(records).map(list)

# Get rid of empty strings
series.map(lambda row: list(filter(lambda x: x != '', row)))

# ... alternatively
series.map(lambda row: [x for x in row if x != ''])
导致

0    [0, 5, 9]
1          [1]
2    [2, 2, 1]
你可以用这个

In[1]: [x[x.apply(lambda k: k != '')].tolist() for i, x in df.iterrows()]

Out[1]: [[5, 9], [], [2, 1]]
类似于。但是如果您不期望
0
值,则可以使用空字符串固有的
False
-ness:

L = [x[x.astype(bool)].tolist() for i, x in df.T.items()]
res = pd.Series(L, index=df.index)
你可以尝试使用

只需取
df.values
。使用
map
将它们转换为列表并删除空元素:

In [2193]: df
Out[2193]: 
  col1 col2 col3
0         5    9
1    1          
2    2    2    1
一艘班轮:
但你为什么要这么做?我需要它来完成一项相当具体的任务。我想知道是否有一种与之相反的方式来执行
.apply(pd.Series)
,@juanpa.arrivillagaThis并没有去除空元素,尽管也删除了0值:(好的,我是以牺牲优雅为代价来破解的。如果值中没有
0
,那么解决方案是可行的,我同意。所以不适用于一般数据,不幸的是…@jezrael,当然。如果
0
数据不是预期的,这个解决方案对于大型数据集的效率大约是空字符串的1.5倍。对于边缘情况,以及未来的情况,也是如此。)e访客,这是值得注意的。在这种情况下也可能有“0”。无论如何,Thx,并同意它在其他情况下可能有用谢谢,很好的解决方案谢谢@caiobelfort
In [2186]: pd.Series(df.values.tolist()).map(lambda row: [x for x in row if x != ''])
Out[2186]: 
0       [5, 9]
1          [1]
2    [2, 2, 1]
dtype: object