我想操纵以下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的情况下获取此列。
答案 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参数从''改为','。