2016-11-11 12 views
3

私は、次のデータフレーム持っている:私は、単一のデータフレームの中に上記のデータフレームを圧縮するにはどうすればよい多次元データフレームを単一の列に圧縮する方法は?

0 1 2 3 4 5 6 7 8 
0 Twitter (True 01/21/2015) None None None None None None None None 
1 Google, Inc. (True 11/07/2016) None None None None None None None None 
2 Microsoft, (True 07/01/2016) Facebook (True 11/01/2016) None None None None None None None 
3 standard & poors, Inc. (True 11/08/2016) None None None None None None None None 
8 apple (True 11/10/2016)  apple (True 11/01/2016)  None None None None None apple (True 11/01/2016)  None 

を?:

0 
0 Twitter (True 01/21/2015) 
1 Google, Inc. (True 11/07/2016) 
2 Microsoft, (True 07/01/2016) \ Facebook (True 11/01/2016) 
3 standard & poors, Inc. (True 11/08/2016) \ 
8 apple (True 11/10/2016) \ apple (True 11/01/2016) \ apple (True 11/01/2016) 

私が試した:私は、しかし

df = df.iloc[:,0].join('\') 

セパレータを追加する方法を理解していない。区切り文字でデータフレームをどのように圧縮するのですか。

答えて

3

私はあなたがNaNからreplaceNoneが必要だと思うし、その後stackNaNを削除し、applyjoinとの最後のgroupby

df = df.replace({None: np.nan, 'None': np.nan}).stack() 
df = df.groupby(level=0).apply(' \\ '.join) 
print (df) 
0       Twitter (True 01/21/2015) 
1      Google, Inc. (True 11/07/2016) 
2 Microsoft, (True 07/01/2016) \ Facebook (True ... 
3    standard & poors, Inc. (True 11/08/2016) 
8 apple (True 11/10/2016) \ apple (True 11/01/20... 
dtype: object 

リスト内包して別の解決策:

df = df.replace({None: np.nan, 'None': np.nan}) 
#python 3 use str, python 2 basestring 
df = df.apply(lambda x : ' \\ '.join([y for y in x if isinstance(y, str)]), axis=1) 

print (df) 
0       Twitter (True 01/21/2015) 
1      Google, Inc. (True 11/07/2016) 
2 Microsoft, (True 07/01/2016) \ Facebook (True ... 
3    standard & poors, Inc. (True 11/08/2016) 
8 apple (True 11/10/2016) \ apple (True 11/01/20... 
dtype: object 

タイミング

#[50000 rows x 9 columns] 
df = pd.concat([df]*10000).reset_index(drop=True) 

In [43]: %timeit (df.replace({None: np.nan, 'None': np.nan}).apply(lambda x : ''.join([y for y in x if isinstance(y, str)]), axis=1)) 
1 loop, best of 3: 820 ms per loop 

In [44]: %timeit (df.replace({None: np.nan, 'None': np.nan}).stack().groupby(level=0).apply(' \\ '.join)) 
1 loop, best of 3: 4.62 s per loop 
+0

おかげしかし、私は奇妙なフォーマットを得ました。それぞれのキャラクターはダウンします。 – student

+0

どちらが速いのですか?...私は、最初の解決策がちょっとかかりますと指摘しました – student

+1

更新ソリューションのタイミングを参照してください – jezrael

0

あなたは、この(私はOKと思われる小さなデータフレームと次の出力を得る)試すことができます:

df = pd.DataFrame({'0':['Twitter (True 01/21/2015)', 'Google, Inc. (True 11/07/2016)', ' Microsoft, (True 07/01/2016)'], '1':[None, None, 'Facebook (True 11/01/2016)'], '2':[None, None, None]}) 
df = df.replace({None: ' ', 'None': ' '}) 
df.astype(str).apply(lambda x: '\\'.join(x), axis=1) 


0      Twitter (True 01/21/2015)\ \ 
1     Google, Inc. (True 11/07/2016)\ \ 
2  Microsoft, (True 07/01/2016)\Facebook (True ... 
dtype: object 
+0

ありがとう私は奇妙なフォーマットを持っています。すべての文字が分割されています。 – student

+0

出力はどのように見えますか? –

+0

'l i k e t h i s' – student

関連する問題