阅读CSV移调大熊猫

问题描述:

我有一个数据集看起来如下:阅读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 

您可以尝试像这样:

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

问题的出现是因为在日期中有更多的冒号。使用"\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