2017-02-04 182 views
3

我有一個數據集看起來如下:閱讀CSV移調大熊貓

Name : joe 
Job : Crazy Consultant 
Hired : 4/12/2011 3:38:55 AM 
Stats : crazy, bald head 
Pay : $5000 Monthly 

Name : Matt 
Job : Crazy Receptionist 
Hired : 4/12/2014 3:38:55 PM 
Stats : crazy, Lots of hair 

Name : Adam 
Job : Crazy Drinker 
Hired : 4/12/2017 3:38:55 AM 
Stats : crazy, unknown 
Term : 4/12/2017 3:38:55 PM 

我閱讀和獲取數據如下:

df = pd.read_csv(r"pathtomycsv.csv", encoding="UTF-16", delimiter='\s+:').transpose() 

輸出的上述:(就像一個例子)

Name  Job    Hired     Stats    Name  Job    Hired     Stats 
Joe  Crazy Consultant 4/12/2011 3:38:55 AM crazy, bald head  Matt  Crazy Consultant 4/12/2011 3:38:55 AM crazy, bald head 

最後,我想借我的數據集從上面,並通過組合頭t將其改造成一個集像下面總共如下:

Name  Job    Hired     Stats    Pay   Term 
Joe  Crazy Consultant 4/12/2011 3:38:55 AM crazy, bald head  $5000 Monthly N/A 
Matt  Crazy Receptionist 4/12/2014 3:38:55 PM crazy, Lots of hair N/A   N/A 
Adam  Crazy Drinker  4/12/2017 3:38:55 AM crazy, unknown  N/A   4/12/2017 3:38:55 PM 

回答

1

您可以嘗試像這樣:

import pandas as pd 

df = pd.read_csv('file_name',sep='\s+:\s+',header=None).pivot(columns=0, values=1) 
df.index = [df.index, df.Name.notnull().cumsum() - 1] 
df = df.stack().reset_index(name='val') 
df = df.pivot(index='Name', columns=0, values='val') 
df 

輸出:

enter image description here

3

問題的出現是因爲在日期中有更多的冒號。使用"\s+:\s+"作爲分隔符。 (是的,它可以是一個正則表達式。)

以下代碼適用於我將文件轉換爲所需的表格。我假設'名字'總是一組中的第一行。

df = pd.read_csv("yourfile", delimiter='\s+:\s+',header=None) 
df = df.reset_index() 
df['index'][df[0]!='Name'] = np.nan 
df['index'] = df['index'].fillna(method='ffill').astype(int) 
df.set_index(['index',0])[1].unstack().set_index('Name') 
#0     Hired     Job   Pay 
#Name                
#joe 4/12/2011 3:38:55 AM Crazy Consultant $5000 Monthly 
#Matt 4/12/2014 3:38:55 PM Crazy Receptionist   None 
#Adam 4/12/2017 3:38:55 AM  Crazy Drinker   None 
+0

根據您的意見更新,這幫助我得到的數據集中到一個DF但我仍然工作在將我的行轉換爲合併的列標題。 – johnnyb

+1

我在答案中增加了更多的想法。 – DyZ

+0

嘗試這種方法,我認爲失敗了,因爲我的數據集有多個頭文件。不同的名稱有些可以有4到7個。 – johnnyb