2017-02-15 7 views
0

私は以下のようなテキストデータを持つデータフレーム、Pythonのパンダは、1行にテキストの2行以上をマージ

name | address     | number 
1 Bob bob      No.56 
2   @gmail.com   
3 Carly [email protected]   No.90 
4 Gorge [email protected]  
5   .com     
6          No.100 

を持っており、このフレームのようにそれを作りたいです。

name | address    | number 
1 Bob [email protected]   No.56 
2 Carly [email protected]   No.90     
3 Gorge [email protected]   No.100 

私はファイルを読み込むためにパンダを使用していますが、マージまたはコンカットの使い方はわかりません。

答えて

0

は一意の値で構成され、

print df 

    name   address number 
0 Bob    bob No.56 
1 NaN  @gmail.com  NaN 
2 Carly [email protected] No.90 
3 Gorge  [email protected]  NaN 
4 NaN    .com  NaN 
5 NaN    NaN No.100 

df['name'] = df['name'].ffill() 
print df.fillna('').groupby(['name'], as_index=False).sum() 

    name   address number 
0 Bob [email protected] No.56 
1 Carly [email protected] No.90 
2 Gorge [email protected] No.100 

あなたは、より複雑なデータへのコードの上に拡張する事のffill()bfill()[::-1].groupby('name').apply(lambda x: ' '.join(x['address']))strip()lstrip()rstrip()replace()種類が必要な場合があります。

0

性行のデータフレーム(各列にNaNのエントリがある可能性があります)を変換する場合は、直接のpandasメソッドがない場合があります。

あなたはパンダが同じユーザーBobに属しbob@gmail.comのスプリット行を知ることができるように、name列に値を割り当てるために、いくつかのコードが必要になります。

あなたはpandas dataframe missing dataを参照してください、fillnaまたはffillメソッドを使用して、その前のユーザーと列nameの各空のエントリを埋めることができます。

df ['name'] = df['name'].ffill() 

# gives 
    name address number 
0 Bob bob No.56 
1 Bob @gmail.com 
2 Carly [email protected] No.90 
3 Gorge [email protected] 
4 Gorge .com  
5 Gorge  No.100 

次に、集計関数としてgroupbysumを使用することができます。

df.groupby(['name']).sum().reset_index() 

# gives 
    name address number 
0 Bob [email protected] No.56 
1 Carly [email protected] No.90 
2 Gorge [email protected] No.100 

あなたはReplacing blank values (white space) with NaN in pandaspandas.DataFrame.fillnaを参照してください、NaNと空白に有用との間の変換を見つけることがあります。 name列の場合

関連する問題