Python 从csv透视数据并存储在dataframe中
我的要求如下: 我有一个包含以下数据的csv文件(这只是一个示例,数据要大得多): 我希望将数据保存在数据框中,以便列应为:Python 从csv透视数据并存储在dataframe中,python,pandas,csv,dataframe,data-science,Python,Pandas,Csv,Dataframe,Data Science,我的要求如下: 我有一个包含以下数据的csv文件(这只是一个示例,数据要大得多): 我希望将数据保存在数据框中,以便列应为: A 01/02/1997 P L 12 B 01/02/1997 Q M 4 C 01/02/1997 R N 5 D 01/02/1997 S O 0 E 01/02/1997 T P 0 A 01/03/1998 P L 71 B 01/03/1998 Q
A 01/02/1997 P L 12
B 01/02/1997 Q M 4
C 01/02/1997 R N 5
D 01/02/1997 S O 0
E 01/02/1997 T P 0
A 01/03/1998 P L 71
B 01/03/1998 Q M 2
C 01/03/1998 R N 4
D 01/03/1998 S O 8
E 01/03/1998 T P 0
基本上第一列应该是旋转的。有人能帮忙吗?名称和数据只是示例(虚拟)首先创建列中的
多索引byheader=[0,1,2]
参数,然后将第一列按index\u col=[0]
转换为索引:
详细信息:
print (df.columns)
MultiIndex([('A', 'P', 'L'),
('B', 'Q', 'M'),
('C', 'R', 'N'),
('D', 'S', 'O'),
('E', 'T', 'P')],
names=['xxxx', 'xxxx', 'DATE'])
然后按换位、重塑、排序,为多索引按创建标签,最后将多索引系列
转换为数据帧
:
pd.read_剪贴板(header=[0,1,2],sep='|').set_index(['xxxx']).unstack().reset_index()
方法是,知道哪一行是header,哪一列是index,设置它们,然后,unstack
或stack
取决于您需要什么。我只是举了一个例子,列号未知,就像目前在这个例子中一样,我只提供了5列abcde,但它们可以有更多不同的名称,所以不能真正形成一个multiindex@ayushgupta-您认为级别数未知吗?样本数据中有3个级别A B C D E
,P Q R S T
,L M N O P
否,级别数是固定的,即3,如图所示。但列的数量并不是如此fixed@ayushgupta-如果标头具有与数据相同的分隔符,且长度相同,则其工作正常。应该有更多的值,仍然工作得很好。@ayushgupta-好的,如果有错误或问题,请告诉我。
df = pd.read_csv(filename, sep="|", header=[0,1,2], index_col=[0])
print (df)
xxxx A B C D E
xxxx P Q R S T
DATE L M N O P
01/02/1997 12 4 5 0 0
01/03/1998 71 2 4 8 0
print (df.columns)
MultiIndex([('A', 'P', 'L'),
('B', 'Q', 'M'),
('C', 'R', 'N'),
('D', 'S', 'O'),
('E', 'T', 'P')],
names=['xxxx', 'xxxx', 'DATE'])
df1 = (df.T
.stack(dropna=False)
.sort_index(level=3)
.rename_axis(('a','b','c','d'))
.reset_index(name='e'))
print (df1)
a b c d e
0 A P L 01/02/1997 12
1 B Q M 01/02/1997 4
2 C R N 01/02/1997 5
3 D S O 01/02/1997 0
4 E T P 01/02/1997 0
5 A P L 01/03/1998 71
6 B Q M 01/03/1998 2
7 C R N 01/03/1998 4
8 D S O 01/03/1998 8
9 E T P 01/03/1998 0