我有一个数据框,它由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来说是新手,任何指针都会很棒!!
答案 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