【问题标题】:Pandas/Python - Excel Data ManipulationPandas/Python - Excel 数据操作
【发布时间】: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。我意识到有writerto_excel,但我只是不确定我会如何使用它。我尽可能多地阅读了文档,但似乎没有可以用来帮助我的功能,这就是它非常复杂的原因(请让我知道如何使它更高效和可编写脚本,我以后可以概括)

附言还有一种方法可以写入excel,但按Count#1的降序排列?

【问题讨论】:

  • 你确定你正确地复制了那个while循环上的缩进吗?缩进是 Python see here 语法的一部分
  • @lerenard 感谢您发现这一点,这只是我对 SO 的复制错误。当我实际运行它时,缩进很好。
  • 缩进之外还有counter += 1 部分。这个循环永远不会结束。
  • 奇怪的是它确实结束了,并且计数器值实际上从未增加。只有温度值增加......这对我来说真的没有意义 O.o
  • 发布SSCE

标签: python arrays string excel pandas


【解决方案1】:

你可以试试

sheet1['GN'] = sheet1.Description.apply(lambda x: x.split('JIG')[1].split()[0])

它应该使用适当的GN=* 值将名称为GN 的新列插入您的DataFrame。

要对任何特定列中的 DataFrame 进行排序,您可以按 sheet1.sort('GN') 对 DataFrame 进行排序。

要将 DataFrame 保存到 excel 文件中,您可以使用 sheet1.to_excel('filename')。您可以将其与上述sort 函数链接,以编写按特定列排序的文件。

【讨论】:

    猜你喜欢
    • 2022-11-24
    • 2021-04-19
    • 2017-05-23
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多