Pandas DataFram中特定列的快速拆分行

2024-09-30 20:19:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据帧:

import pandas as pd
df = pd.DataFrame({'Probes':["1415693_at","1415693_at"],
                   'Genes':["Canx","LOC101056688 /// Wars "],
                   'cv_filter':[ 0.134,0.290],
                   'Organ' :["LN","LV"]}   )    
df = df[["Probes","Genes","cv_filter","Organ"]]  

看起来像这样:

^{pr2}$

我要做的是根据输入的Genes列拆分行 以“///”分隔。在

我想得到的结果是

       Probes                   Genes  cv_filter Organ
0  1415693_at                    Canx      0.134    LN
1  1415693_at            LOC101056688      0.290    LV
2  1415693_at                    Wars      0.290    LV

我总共有大约15万行要检查。有没有一种快速处理的方法?在


Tags: 数据importdffiltercvatpdln
1条回答
网友
1楼 · 发布于 2024-09-30 20:19:49

您可以先尝试^{}Genes,创建新的Series,然后^{}将其还原为原始df

import pandas as pd
df = pd.DataFrame({'Probes':["1415693_at","1415693_at"],
                   'Genes':["Canx","LOC101056688 /// Wars "],
                   'cv_filter':[ 0.134,0.290],
                   'Organ' :["LN","LV"]}   )    
df = df[["Probes","Genes","cv_filter","Organ"]]  
print df
       Probes                   Genes  cv_filter Organ
0  1415693_at                    Canx      0.134    LN
1  1415693_at  LOC101056688 /// Wars       0.290    LV

s = pd.DataFrame([ x.split('///') for x in df['Genes'].tolist() ], index=df.index).stack()
#or you can use approach from comment
#s = df['Genes'].str.split('///', expand=True).stack()

s.index = s.index.droplevel(-1) 
s.name = 'Genes' 
print s
0             Canx
1    LOC101056688 
1            Wars 
Name: Genes, dtype: object

#remove original columns, because error:
#ValueError: columns overlap but no suffix specified: Index([u'Genes'], dtype='object')    
df = df.drop('Genes', axis=1)

df = df.join(s).reset_index(drop=True)
print df[["Probes","Genes","cv_filter","Organ"]] 
       Probes          Genes  cv_filter Organ
0  1415693_at           Canx      0.134    LN
1  1415693_at  LOC101056688       0.290    LV
2  1415693_at          Wars       0.290    LV

相关问题 更多 >