试图从数据帧解析单元格

时间:2018-05-31 20:44:38

标签: python pandas xlwt

我有一个数据框,它由excel电子表格中的一些选定列组成。

xls_file = pd.ExcelFile('seedtestexcelbytask.xls') 
writer = ExcelWriter('DFExport.xls') 
df = xls_file.parse(usecols=[2, 3, 15])

这是数据帧的一个小例子

2         3         15
True      2/2/18    Seed 2 2in Holon, 83/1/2
True      2/3/18    Seed 1 1in Holon, 83/5
True      2/5/18    Seed 2 1.5in Holon, 26/1/2, 21/2, RW/1/2, H/7 

第15列中有不同的值,有些用空格分隔,有些是逗号,有些是斜线,这里有一个例子

Seed 2 1.5in Holon, 26/1/2, 21/2, RW/1/2, H/7 

基本上我试图通过读取一行来重新格式化df,保留第3列中的日期值,然后解析第15列的行上的单元格并打破该单元格,进一步添加日期和一些值到下一行

2/2/18    83     1
2/2/18    83     2
2/3/18    83     5
2/5/18    26     1
2/5/18    26     2
2/5/18    21     2
2/5/18    RW     1
2/5/18    RW     2
2/5/18     H     7 

我已尝试过使用xlrd和xlwt的选项,但发现我只是继续添加嵌套for循环,但我不认为这是最有效的方法,或者是它?我找到了大熊猫iterrows(),但我正在努力弄清楚如何获得我想要的输出。我不认为我需要一些我可以复制和粘贴的代码,但是对Python来说是新手我很难正确地实现pandas。对Python来说是新手,任何指针都会很棒!!

1 个答案:

答案 0 :(得分:0)

你可以试试这个:

import pandas as pd
a = pd.DataFrame({2:['2/2/18','2/3/18','2/5/18'],3:['Seed 2 2in Holon, 83/1/2','Seed 1 1in Holon, 83/5','Seed 2 1.5in Holon, 26/1/2, 21/2, RW/1/2, H/7']})
a= pd.concat([pd.Series(row[2],row[3].split(',')) for _, row in a.iterrows()]).reset_index()
a= a[a['index'].str.contains('/')].reset_index(drop = True)
y = pd.DataFrame(a['index'].str.split('/',1).tolist(),columns = ['first','rest'])
y[0] = a[0]
df1 = pd.concat([pd.Series(row['first'],row['rest'].split('/')) for _, row in y.iterrows()]).reset_index()
df2 = pd.concat([pd.Series(row[0],row['rest'].split('/')) for _, row in y.iterrows()]).reset_index()
df1['date'] = df2[0]
print(df1)

结果:

  index    0    date
0     1   83  2/2/18
1     2   83  2/2/18
2     5   83  2/3/18
3     1   26  2/5/18
4     2   26  2/5/18
5     2   21  2/5/18
6     1   RW  2/5/18
7     2   RW  2/5/18
8     7    H  2/5/18