为数字类型推断pandas数据帧的标题名称

2024-04-19 15:32:54 发布

您现在位置:Python中文网/ 问答频道 /正文

ID         91  57 60  79  888 111
06/03/2015  1   2   2   4   1   1
03/03/2015  1   2   2   2   2   3
06/04/2015  1   2   2   2   1   1
17/04/2015  1   3   2   2   1   3
21/04/2015  3   2   1   1   2   1
12/05/2015  1   3   2   2   2   3

我有一个csv文件,其中的ID列(数值)和一个值(1-4)分配给每个ID的特定日期。最终,我希望数据采用以下格式:

^{pr2}$

等等。。。在

尝试:

我的想法是从创建pandas数据帧开始,如下所示:

df = pd.read_csv("file.csv", sep=', ', delimiter=None, header='infer')

我遇到的问题是infer似乎无法检测到头名称,因为值是数字?在

我希望从这里的数据帧中执行操作


Tags: 文件csv数据idpandasdfread格式
2条回答

如有必要,可将^{}与重命名列一起使用:

#s\+ is space separator, if necessary change it
df = pd.read_csv("file.csv", sep='\s+')

d = {'ID':'Date'}
cols = ['Date','Score','ID']
df = df.rename(columns=d).melt('Date', var_name='ID', value_name='Score')[cols]

#convert ID column to int
df['ID'] = df['ID'].astype(int)
print (df)
         Date  Score   ID
0  2015-06-03      1   91
1  2015-03-03      1   91
2  2015-06-04      1   91
3  2015-04-17      1   91
4  2015-04-21      3   91
5  2015-12-05      1   91
6  2015-06-03      2   57
7  2015-03-03      2   57
8  2015-06-04      2   57
...

但若第一列是索引,则使用^{}

^{pr2}$

然后可以将所有列转换为int:

df.columns = df.columns.astype(int)

cols = ['Date','Score','ID']
df = df.unstack().rename_axis(('ID','Date')).reset_index(name='Score')[cols]
print (df)

         Date  Score   ID
0  2015-06-03      1   91
1  2015-03-03      1   91
2  2015-06-04      1   91
3  2015-04-17      1   91
4  2015-04-21      3   91
5  2015-12-05      1   91
6  2015-06-03      2   57
...
...

您可以使用pandas.melt

例如:

import pandas as pd

#Read the data from a txt
path = ' '
df = pd.read_csv(path, sep = '\s+' ,header  = 0)

#Use melt to flatten the dataframe and set ID column as index
pd.melt(df, id_vars=['ID']).set_index('ID')

输出:

ID variable value

06/03/2015 91 1

03/03/2015 91 1

06/04/2015 91 1

06/03/2015 57 2

相关问题 更多 >