【发布时间】:2016-09-23 19:01:26
【问题描述】:
所以,对于 Python/Pandas 来说相对较新,但我确实有几年的编程经验,但它主要使用 Java/C++,所以没有像 Python 这样的脚本语言。
我的新工作让我做一些脚本工作,到目前为止,它非常基础,所以我决定尝试做更多的事情,并希望向我的老板展示我有动力并愿意努力工作并在阶梯上晋升我想通过使用 Pandas 从 excel 表中删除冗余来提高我们的数据分析任务之一。但是,我试图“解析”的冗余是“描述”excel 列中的子字符串。
import pandas as pd
xlsx = pd.ExcelFile('Filename.xlsx')
sheet1 = xlsx.parse(0)
所以我读取了 excel 文件并将其解析为数据框。我意识到只使用 read_csv 可能更容易,但是当我想到它的时候,我已经致力于使用 excel。 (除非转换不困难,我只是很困惑当原始文件以空格分隔时如何导出为逗号分隔)
以下是数据的布局方式:
ID Count#1 Count#2 Count#3 Description
1A42H4 1 0 2 Blahblah JIG GN=TRAC Blah Blah
242JB4 0 0 2 Blahblah JIG GN=SMOOTH Blah Blah
3MIVJ2 2 0 2 Blahblah JIG GN=TRAC Blah Blah
4JAXI3 1 0 3 BlahBlah JIG GN=TRAC Blah Blah
所以我想解析这个数据表并寻找任何多余的GN=TRAC(只是类似的 GN=something),然后将它们全部组织到一个单独的数据表中。所以我做了一个只有描述列的数组
`array = dataframe.description`
然后,我决定在“JIG”上使用字符串拆分,因为我不需要它,而且它对于所有行都是恒定的。所以
`Splits = array.str.split('JIG')`
因为我留下了
`array[0] = Blahblah,
GN=TRAC Blah Blah`
现在我想再次隔离它
GN=TRAC
所以我将它们全部添加到一个数组中
`array2[n] = splits[n][1]`
再次拆分splits2 = array2.str.split(' ') 以重组
GN=TRAC
作为第一个位置并自行隔离。我意识到我本可以在原始描述上用空格分隔,但是单词的数量不同,所以我无法解析或比较,因为
的位置GN=TRAC
都是不同的。
现在要迭代和比较它们,我想出了这个小函数。
counter = 0
temp = counter + 1
print(sheet1.iloc[counter])
while counter <= len(sheet1):
if splits2[counter][0] == splits2[temp][0]:
print(sheet1.iloc[temp])
temp += 1
if splits2[counter][0] != splits2[temp][0]:
temp += 1
counter += 1
但我无法通过这里。我能够遍历并找到具有第一行 GN=TRAC 值的所有冗余行,但计数器不会迭代下一行以进行比较。我尝试了几种变化,但我希望有一双新的眼睛。根据上面的表格,它会转到第二行并查找与 GN=SMOOTH 匹配的所有行,然后一直到 counter 到达最终的迭代行。
最后,我希望我能获得一些帮助,以最佳方式根据GN=? 将它们组织在一起,形成 output.xlsx。我意识到有writer 和to_excel,但我只是不确定我会如何使用它。我尽可能多地阅读了文档,但似乎没有可以用来帮助我的功能,这就是它非常复杂的原因(请让我知道如何使它更高效和可编写脚本,我以后可以概括)
附言还有一种方法可以写入excel,但按Count#1的降序排列?
【问题讨论】:
标签: python arrays string excel pandas