从DataFrame中提取指定区域

时间:2015-07-24 19:19:16

标签: python pandas

我想操纵以下cvs文件:

"Day" "Hour" "X1" "X2" "X3" "X4" "X5"
2015-01-01 00:00 1 2 3 4 5
         .....

以下内容:

"Day Hour" "X2" "X3" "X5"
"2015-01-01 00:00" 2 3 5
         .....

它只是组合两列并使用一系列列。 我试过跟随:

csv = pandas.read_csv('test.csv')
csv['Time'] = cvs.Day + " " + csv.Hour
csv.set_index('Time')

我无法弄清楚如何在不创建新DataFrame的情况下获取此列。

2 个答案:

答案 0 :(得分:1)

您可以将csv重新分配给新的数据框:

df['Time'] = df.Day + " " + df.Hour

df = df[[-1]]

一旦你没有其他参考df,那么它将是gc' d

或者在使用csv进行转置时使用itertools.izip lib来阅读和加入列:

import pandas as pd
from itertools import izip
import csv

with open("foo.csv") as f:
    next(f) # skip header
    r = csv.reader(f)
    zp = izip(*r)
    pairs = izip(next(zp), next(zp))
    df = pd.DataFrame(("{} {}".format(a,b) for a,b in pairs),columns=["Time"])

    print(df)

输出:

              Time
0  2015-01-01 00:00

如果您确实希望在创建新列后立即删除其他列:

df['Time'] = df.Day + " " + df.Hour

df.drop(["Day","Hour"],axis=1,inplace=True)
print(df)

答案 1 :(得分:0)

最简单的答案与csv无关。您的示例文本不以逗号分隔。因此,根据您显示的格式,这是一个解决方案。最后三行可以组合成一行,但为了清楚起见,我选择将它们分开。

import string
with open('test.csv') as f:
    for line in f:
        line = line.strip().split(' ')
        line = line[0:2] + line[3:5] + line[6:7]
        print string.join(line, ' ')

如果这些行真的是csv格式,你只需将上面的split和join参数从''改为','。