阅读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
答
问题的出现是因为在日期中有更多的冒号。使用"\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
根据您的意见更新,这帮助我得到的数据集中到一个DF但我仍然工作在将我的行转换为合并的列标题。 – johnnyb
我在答案中增加了更多的想法。 – DyZ
尝试这种方法,我认为失败了,因为我的数据集有多个头文件。不同的名称有些可以有4到7个。 – johnnyb