在熊猫的多行中解析具有日期时间值的转置CSV

时间:2019-05-01 12:17:21

标签: pandas csv datetime parsing transpose

我正在尝试导入包含多个时间序列的csv文件。

我面临的挑战是:

a)转换了csv文件,因此无法从列中解析日期。通常使用read_csv().T命令转置文件,但是考虑到日期时间信息,这是不合适的。

b)由于日期时间索引位于标题行上,因此重复的数据点将添加一个数字(即Jan变为JanJan.1Jan.2等) ,因此剥离日期时间值变得困难。

c)第一列标题(不包括日期时间信息)放在日期时间数据的最后一行(第三行)上,这会使解析标题变得更加复杂。

是否有一种简单的方法,可以从csv转到“标准”数据帧结构,并从csv和列中的值解析出日期时间索引?

此处提供了csv数据结构的示例:

empty  | empty  | Jan   | Jan   | Jan   | ... | Dec   |
empty  | empty  |  1    |  1    |  1    | ... | 31    |
head1  | head2  | 00:00 | 01:00 | 02:00 | ... | 23:00 |
---
value1 | value2 | 0.35  | 0.38  | 0.44  | ... | 0.20  |
...

1 个答案:

答案 0 :(得分:0)

尝试:

# read csv with no header 
df = pd.read_csv('untitled.txt', header=None).T

# create an index by joining all the columns
df['idx'] = [ ' '.join((a,b,c)) for a,b,c in 
             zip(df[0].fillna(''),
                 df[1].fillna(''), 
                 df[2].fillna('')) ]

# drop the unnecessary columns
df.drop([0,1,2], axis=1, inplace=True)

# output
df.set_index('idx').T.reset_index(drop=True)

输出:

+----+-----------+-----------+---------------+---------------+---------------+----------------+
|    |   head1   |   head2   |   Jan 1 00:00 |   Jan 1 01:00 |   Jan 1 02:00 |   Dec 31 23:00 |
|----+-----------+-----------+---------------+---------------+---------------+----------------|
|  0 | value1    | value2    |          0.35 |          0.38 |          0.44 |            0.2 |
+----+-----------+-----------+---------------+---------------+---------------+----------------+

如上所述,列仍为文本(str类型)。如果需要,您需要将它们转换回时间戳。