如何在CSV文件的标题中使用一行作为数据框中的索引?

时间:2018-01-17 16:56:09

标签: python pandas csv

我有一个.csv文件,标题中有4行。其中一个是列名,我已经正确导入了其他数据。

标题中的一行告诉我带有起始值,停止值和步长的索引值。我无法弄清楚如何读取该信息并将其转换为数据帧的索引值。

标题如下所示:

Title
date time
index_start value, index_stop value, index_step, #, units
col1, col2, col3, col4
data, data, data, data
data, data ,data ,data
..., ..., ..., ..

1 个答案:

答案 0 :(得分:0)

您可以读取文件以获取索引值,然后使用header中的pd.DataFrame.from_csv()参数跳过前几行。最后用几个命令创建一个新索引。

这是一个例子。

假设文件是​​:

Title
date time
index_start 10, index_stop 30, index_step 10, #, units
col1, col2, col3, col4
1, a, data, data
2, b, data, data
3, c, data, data

第1步:读取文件并获取索引参数。

filename = 'path/to/file'
index_start, index_stop, index_step = None, None, None
with open(filename, 'r') as f:
    title = f.readline().strip()  # read first line for title
    date, time = f.readline().strip().split()  # split line 2 on whitespace

    # first read line 3 and split on commas
    index_start, index_stop, index_step, _, _ = f.readline().strip().split(',')

    # split on whitespace and convert to int
    index_start = int(index_start.split()[1])
    index_stop = int(index_stop.split()[1])
    index_step = int(index_step.split()[1])

这适用于我的示例文件,但由于您的问题不清楚,因此必须针对您的特定文件格式修改这些命令。

>>> print(index_start, index_stop, index_step)
(10, 30, 10)

第2步:将文件读入数据框,跳过前3行。

df = pd.DataFrame.from_csv(filename, header=3, index_col=None)

第3步:将您的索引创建为新列,然后使用set_index()将其设为索引。

df = pd.DataFrame.from_csv(filename, header=3, index_col=None)
df['new_index'] = range(index_start, index_stop+index_step, index_step)
df = df.set_index('new_index')
df.index.name = None

最终输出

    col1  col2   col3   col4
10     1     a   data   data
20     2     b   data   data
30     3     c   data   data