python - 如何使用 pandas 从 csv 中读取一行,进行 VLOOKUP 操作并将结果保存到另一个文件中?

标签 python python-2.7 csv dataframe

从此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 文件,该文件在行中而不是 2 列中包含 df1 的所有信息,并将其转换为 2 列的临时文件,这样我就可以读取它并继续使用 VLOOKUP 查找 df3。如下例所示:

现在,假设 df1.csvdf2.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  

谢谢!

最佳答案

首先创建 DataFrame - header=None 表示没有 csv header :

df1 = pd.read_csv('df1.csv', sep=';',header=None)

通过 stack reshape 为系列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 ,最后一次 reshape 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

关于python - 如何使用 pandas 从 csv 中读取一行,进行 VLOOKUP 操作并将结果保存到另一个文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48359925/

相关文章:

python 从给定关键字的文件中删除一定数量的行

Python - 错误 CryptProtectData key 在指定状态下无效

javascript - 如何使用Papa Parse进行javascript csv解析

python - 获取所有 JIRA 问题的列表(python)

Python 根据字符串在列表中出现的次数对字符串进行排序

sql - 使用 Excel 编辑电子商务数据库是否现实?

powershell使用employeeID获取sAMAccount信息

python - 当元组中每个位置的值来自不同的列表时,从元组序列创建值索引数组

python - 从嵌套列表中剥离文本并将内容保存到 csv 文件中

python - 在 Python 中记录和继承记录器的配置