从这个question开始,我找到了如何使用pandas来进行VLOOKUP。 所以,正如jezrael建议的那样,我这样做了:
df1 = pd.read_csv('df1.csv', names=['a','b'])
print (df1)
a b
0 Time 07:03:52
1 EmployeeID 98766
2 EmployeeName Joao
3 Time 08:03:52
4 EmployeeID 98765
5 EmployeeName Mary
#for columns names created from file2
df2 = pd.read_csv('df2.csv')
c = df2.columns.str.strip().tolist()
print (c)
['EmployeeID', 'EmployeeName', 'Time']
#or defined in list
#c = ['Time', 'EmployeeID', 'EmployeeName']
g = df1.groupby('a').cumcount()
df1 = df1.set_index([g,'a'])['b'].unstack().reindex(columns=c)
print (df1)
我知道了:
a EmployeeID EmployeeName Time
0 98766 Joao 07:03:52
1 98765 Mary 08:03:52
现在,我想了解如何获取一个.csv文件,其中包含df1
的所有信息,而不是2列,并将其转换为2列的临时文件,所以我可以阅读它并继续VLOOKUP到df3
。如下例所示:
现在,假设 df1.csv 和 df2.csv 还有其他值:
df1.csv
Symbol, A;Goal,1.07;Range,0.72 - 1.07;Return over time,15.91%;;
Symbol, B;Goal,1.06;Range,0.5 - 1.32;Return over time,9.91%;Maturity,5;Total,13.555
df2.csv
Return_over_time,Maturity,Symbol,Goal,Range,Total
我希望得到与上面相同的结果,但是从df1
的每一行获取信息。所以我可以得到这个结果:
df3.csv
Symbol Return_over_time Goal Range Maturity Total
A 15.91% 1.07 0.72 - 1.07
B 9.91% 1.06 0.5 - 1.32 5 13.555
谢谢!
答案 0 :(得分:1)
首先创建DataFrame - header=None
表示没有csv
标题:
df1 = pd.read_csv('df1.csv', sep=';',header=None)
按stack
重新定位到Series
,split
正则表达式'\s*,\s*
表示逗号之间有双零或更多空格:
df1 = df1.stack().str.split('\s*,\s*', expand=True)
print (df1)
0 1
0 0 Symbol A
1 Goal 1.07
2 Range 0.72 - 1.07
3 Return over time 15.91%
1 0 Symbol B
1 Goal 1.06
2 Range 0.5 - 1.32
3 Return over time 9.91%
4 Maturity 5
按reset_index
删除第二级并添加新级别
set_index
,最后通过unstack
重新塑造:
df1 = df1.reset_index(level=1, drop=True).set_index(0, append=True)[1].unstack()
print (df1)
0 Goal Maturity Range Return over time Symbol Total
0 1.07 None 0.72 - 1.07 15.91% A None
1 1.06 5 0.5 - 1.32 9.91% B 13.555